diff --git a/webrtc/voice_engine/test/auto_test/voe_extended_test.cc b/webrtc/voice_engine/test/auto_test/voe_extended_test.cc deleted file mode 100644 index af37edba57..0000000000 --- a/webrtc/voice_engine/test/auto_test/voe_extended_test.cc +++ /dev/null @@ -1,5160 +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 "webrtc/voice_engine/test/auto_test/voe_extended_test.h" - -#include -#include -#include - -#include "webrtc/test/testsupport/fileutils.h" -#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h" -#include "webrtc/voice_engine/voice_engine_defines.h" - -#if defined(_WIN32) -#include -#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) -#include -#endif - -using namespace webrtc; -using namespace test; - -namespace voetest { - -#ifdef WEBRTC_ANDROID -// Global pointers -extern void* globalJavaVM; -extern void* globalContext; -#endif - -static const int kTestMaxNumChannels = 100; - -// ---------------------------------------------------------------------------- -// External AudioDeviceModule implementation -// ---------------------------------------------------------------------------- - -// static -AudioDeviceModuleImpl* AudioDeviceModuleImpl::Create() { - AudioDeviceModuleImpl* xADM = new AudioDeviceModuleImpl(); - if (xADM) - xADM->AddRef(); - return xADM; -} - -// static -bool AudioDeviceModuleImpl::Destroy(AudioDeviceModuleImpl* adm) { - if (!adm) - return false; - int32_t count = adm->Release(); - if (count != 0) { - return false; - } else { - delete adm; - return true; - } -} - -AudioDeviceModuleImpl::AudioDeviceModuleImpl() : _ref_count(0) {} - -AudioDeviceModuleImpl::~AudioDeviceModuleImpl() {} - -int32_t AudioDeviceModuleImpl::AddRef() { return ++_ref_count; } - -int32_t AudioDeviceModuleImpl::Release() { - // Avoid self destruction in this mock implementation. - // Ensures that we can always check the reference counter while alive. - return --_ref_count; -} - -// ---------------------------------------------------------------------------- -// External transport (Transport) implementations: -// ---------------------------------------------------------------------------- - -ExtendedTestTransport::ExtendedTestTransport(VoENetwork* ptr) - : myNetw(ptr), - _thread(NULL), - _lock(NULL), - _event(NULL), - _length(0), - _channel(0) { - const char* threadName = "voe_extended_test_external_thread"; - _lock = CriticalSectionWrapper::CreateCriticalSection(); - _event = EventWrapper::Create(); - _thread = ThreadWrapper::CreateThread(Run, this, kHighPriority, threadName); - if (_thread) { - unsigned int id; - _thread->Start(id); - } -} - -ExtendedTestTransport::~ExtendedTestTransport() { - if (_thread) { - _thread->SetNotAlive(); - _event->Set(); - if (_thread->Stop()) { - delete _thread; - _thread = NULL; - delete _event; - _event = NULL; - delete _lock; - _lock = NULL; - } - } -} - -bool ExtendedTestTransport::Run(void* ptr) { - return static_cast(ptr)->Process(); -} - -bool ExtendedTestTransport::Process() { - switch (_event->Wait(500)) { - case kEventSignaled: - _lock->Enter(); - myNetw->ReceivedRTPPacket(_channel, _packetBuffer, _length); - _lock->Leave(); - return true; - case kEventTimeout: - return true; - case kEventError: - break; - } - return true; -} - -int ExtendedTestTransport::SendPacket(int channel, const void* data, int len) { - _lock->Enter(); - if (len < 1612) { - memcpy(_packetBuffer, (const unsigned char*)data, len); - _length = len; - _channel = channel; - } - _lock->Leave(); - _event->Set(); // triggers ReceivedRTPPacket() from worker thread - return len; -} - -int ExtendedTestTransport::SendRTCPPacket(int channel, - const void* data, - int len) { - myNetw->ReceivedRTCPPacket(channel, data, len); - return len; -} - -// ---------------------------------------------------------------------------- -// VoERTPObserver -// ---------------------------------------------------------------------------- - -XRTPObserver::XRTPObserver() : _SSRC(0) {} - -XRTPObserver::~XRTPObserver() {} - -void XRTPObserver::OnIncomingCSRCChanged(const int /*channel*/, - const unsigned int /*CSRC*/, - const bool /*added*/) {} - -void XRTPObserver::OnIncomingSSRCChanged(const int /*channel*/, - unsigned int SSRC) { - // char msg[128]; - // sprintf(msg, "OnIncomingSSRCChanged(channel=%d, SSRC=%lu)\n", - // channel, SSRC); - // TEST_LOG(msg); - - _SSRC = SSRC; // skip channel dependency for simplicty -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::PrepareTest(const char* str) const { - TEST_LOG("\n\n================================================\n"); - TEST_LOG("\tExtended *%s* Test\n", str); - TEST_LOG("================================================\n\n"); - - return 0; -} - -int VoEExtendedTest::TestPassed(const char* str) const { - TEST_LOG("\n\n------------------------------------------------\n"); - TEST_LOG("\tExtended *%s* test passed!\n", str); - TEST_LOG("------------------------------------------------\n\n"); - - return 0; -} - -void VoEExtendedTest::OnPeriodicDeadOrAlive(const int /*channel*/, bool alive) { - _alive = alive; - if (alive) { - TEST_LOG("=> ALIVE "); - } else { - TEST_LOG("=> DEAD "); - } - fflush(NULL); -} - -void VoEExtendedTest::CallbackOnError(int errCode, int) { - _errCode = errCode; - TEST_LOG("\n************************\n"); - TEST_LOG(" RUNTIME ERROR: %d \n", errCode); - TEST_LOG("************************\n"); -} - -VoEExtendedTest::VoEExtendedTest(VoETestManager& mgr) : _mgr(mgr) { - for (int i = 0; i < 32; i++) { - _listening[i] = false; - _playing[i] = false; - _sending[i] = false; - } -} - -VoEExtendedTest::~VoEExtendedTest() {} - -void VoEExtendedTest::StartMedia(int channel, - int rtpPort, - bool listen, - bool playout, - bool send) { - VoEBase* voe_base_ = _mgr.BasePtr(); - - _listening[channel] = false; - _playing[channel] = false; - _sending[channel] = false; - - VoENetwork* voe_network = _mgr.NetworkPtr(); - - voice_channel_transports_[channel] - .reset(new VoiceChannelTransport(voe_network, channel)); - - voice_channel_transports_[channel]->SetSendDestination("127.0.0.1", rtpPort); - voice_channel_transports_[channel]->SetLocalReceiver(rtpPort); - - if (listen) { - _listening[channel] = true; - voe_base_->StartReceive(channel); - } - if (playout) { - _playing[channel] = true; - voe_base_->StartPlayout(channel); - } - if (send) { - _sending[channel] = true; - voe_base_->StartSend(channel); - } -} - -void VoEExtendedTest::StopMedia(int channel) { - VoEBase* voe_base_ = _mgr.BasePtr(); - - if (_listening[channel]) { - _listening[channel] = false; - voe_base_->StopReceive(channel); - } - if (_playing[channel]) { - _playing[channel] = false; - voe_base_->StopPlayout(channel); - } - if (_sending[channel]) { - _sending[channel] = false; - voe_base_->StopSend(channel); - } - voice_channel_transports_[channel].reset(NULL); -} - -void VoEExtendedTest::Play(int channel, - unsigned int timeMillisec, - bool addFileAsMicrophone, - bool addTimeMarker) { - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEFile* file = _mgr.FilePtr(); - - voe_base_->StartPlayout(channel); - TEST_LOG("[playing]"); - fflush(NULL); - if (addFileAsMicrophone) { - file->StartPlayingFileAsMicrophone( - channel, _mgr.AudioFilename(), true, true); - TEST_LOG("[file as mic]"); - fflush(NULL); - } - if (addTimeMarker) { - float dtSec = (float)((float)timeMillisec / 1000.0); - TEST_LOG("[dT=%.1f]", dtSec); - fflush(NULL); // print sleep time in seconds - } - SleepMs(timeMillisec); - voe_base_->StopPlayout(channel); - file->StopPlayingFileAsMicrophone(channel); -} - -void VoEExtendedTest::Sleep(unsigned int timeMillisec, bool addMarker) { - if (addMarker) { - float dtSec = (float)((float)timeMillisec / 1000.0); - TEST_LOG("[dT=%.1f]", dtSec); // print sleep time in seconds - } - webrtc::SleepMs(timeMillisec); -} - -int VoEExtendedTest::TestBase() { -#ifndef _WIN32 -// Sleep a bit instead when pause not supported -#undef PAUSE -#define PAUSE SleepMs(2000); -#endif - - PrepareTest("Base"); - - // TODO(phoglund): make this an actual instance variable. I think the - // macro black magic will make more sense then. This is named like an - // instance variable since it is required in order to appease the - // gods of darkness. - VoEBase* voe_base_ = _mgr.BasePtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); -#ifdef _TEST_RTP_RTCP_ - VoERTP_RTCP* rtp = _mgr.RTP_RTCPPtr(); -#endif - -////////////////////////// -// SetTraceFileName - -#ifdef _USE_EXTENDED_TRACE_ - TEST(SetTraceFileName - SetDebugTraceFileName); - ANL(); - TEST_MUSTPASS(VoiceEngine::SetTraceFile(NULL)); - MARK(); - // don't use these files - std::string output_path = webrtc::test::OutputPath(); - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - (output_path + "VoEBase_trace_dont_use.txt").c_str())); - MARK(); - // use these instead - TEST_MUSTPASS(VoiceEngine::SetTraceFile(GetFilename("" - (output_path + "VoEBase_trace.txt").c_str())); MARK(); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter(kTraceStream | - kTraceStateInfo | - kTraceWarning | - kTraceError | - kTraceCritical | - kTraceApiCall | - kTraceMemory | - kTraceInfo)); MARK(); - - ANL(); AOK(); ANL(); ANL(); -#endif - - /////////////////////////////////////// - // RegisterVoiceEngineObserver - // DeRegisterVoiceEngineObserver - TEST(SetObserver); - ANL(); - - TEST_MUSTPASS(voe_base_->RegisterVoiceEngineObserver(*this)); - MARK(); - SleepMs(100); - TEST_MUSTPASS(voe_base_->DeRegisterVoiceEngineObserver()); - MARK(); - - ANL(); - AOK(); - ANL(); - ANL(); - - ///////////////////// - // GetVersion - TEST(GetVersion); - ANL(); - - char version[1024]; - // audio device module and AudioProcessing fail to getversion when they - // are not initiliazed - TEST_MUSTPASS(voe_base_->GetVersion(version)); - MARK(); - TEST_LOG("\n-----\n%s\n-----\n", version); - - ANL(); - AOK(); - ANL(); - ANL(); - - /////////////// - // Init - TEST(Init); - ANL(); - - TEST_MUSTPASS(voe_base_->Init()); - MARK(); - TEST_MUSTPASS(voe_base_->Terminate()); - - TEST_MUSTPASS(voe_base_->Init()); - MARK(); - // ensure that no new memory is allocated at the second call (check - // trace file) - TEST_MUSTPASS(voe_base_->Init()); - MARK(); - TEST_MUSTPASS(voe_base_->Terminate()); -#if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - // verify AEC recording - TEST_MUSTPASS(voe_base_->Init()); - MARK(); // verify output dat-files - TEST_MUSTPASS(voe_base_->Terminate()); -#endif - - ANL(); - AOK(); - ANL(); - ANL(); - - //////////////////// - // Terminate - TEST(Terminate); - ANL(); - TEST_MUSTPASS(voe_base_->Terminate()); - MARK(); // should be ignored - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->Terminate()); - MARK(); // should terminate - - ANL(); - AOK(); - ANL(); - ANL(); - - // ------------------------------------------------------------------------ - // >> Init(AudioDeviceModule) - // - // Note that our mock implementation of the ADM also mocks the - // reference counting part. This approach enables us to keep track - // of the internal reference counter without checking return values - // from the ADM and we also avoid the built-in self destruction. - // - // TODO(henrika): this test does not verify that external ADM methods - // are called by the VoiceEngine once registered. We could extend - // the mock implementation and add counters for each ADM API to ensure - // that they are called in the correct sequence and the correct number - // of times. - TEST_LOG("\nTesting: Init in combination with an external ADM\n"); - - // Create the ADM and call AddRef within the factory method. - AudioDeviceModuleImpl* xADM = AudioDeviceModuleImpl::Create(); - ASSERT_FALSE(xADM == NULL); - ASSERT_TRUE(xADM->ReferenceCounter() == 1); - - // Verify default usage case for external ADM. - TEST_MUSTPASS(voe_base_->Init(xADM));MARK(); - ASSERT_TRUE(xADM->ReferenceCounter() == 2); - TEST_MUSTPASS(voe_base_->Terminate()); - ASSERT_TRUE(xADM->ReferenceCounter() == 1); - - // Our reference-count implementation does not self destruct. - // We do it manually here instead by calling Release followed by delete. - ASSERT_TRUE(AudioDeviceModuleImpl::Destroy(xADM)); - ANL(); - AOK();ANL(); - - // >> end of Init(AudioDeviceModule) - // ------------------------------------------------------------------------ - - //////////////////////// - // CreateChannel - // DeleteChannel - - int i; - int channel; - static const int kTestMaxNumChannels = 100; - - TEST(CreateChannel); - ANL(); - TEST(DeleteChannel); - ANL(); - - TEST_MUSTPASS(voe_base_->Init()); - - channel = voe_base_->CreateChannel(); - MARK(); - TEST_MUSTPASS(channel != 0); - channel = voe_base_->CreateChannel(); - MARK(); - TEST_MUSTPASS(channel != 1); - - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - MARK(); - TEST_MUSTPASS(voe_base_->DeleteChannel(1)); - MARK(); - - // create and delete one channel many times - for (i = 0; i < 10; i++) { - channel = voe_base_->CreateChannel(); - MARK(); - TEST_MUSTPASS(channel != 0); // should be 0 each time - TEST_MUSTPASS(voe_base_->DeleteChannel(channel)); - MARK(); - } - // create max number of channels - for (i = 0; i < kTestMaxNumChannels; i++) { - channel = voe_base_->CreateChannel(); - MARK(); - TEST_MUSTPASS(channel != i); - } - channel = voe_base_->CreateChannel(); - MARK(); // should fail since no more channels can now be created - TEST_MUSTPASS(channel != -1); - - int aChannel = - (((kTestMaxNumChannels - 17) > 0) ? (kTestMaxNumChannels - 17) : 0); - TEST_MUSTPASS(voe_base_->DeleteChannel(aChannel)); - MARK(); - channel = voe_base_->CreateChannel(); - MARK(); // should reuse channel - TEST_MUSTPASS(channel != aChannel); - - // delete all created channels - for (i = 0; i < kTestMaxNumChannels; i++) { - TEST_MUSTPASS(voe_base_->DeleteChannel(i)); - MARK(); - } - - // try to delete a non-existing channel - TEST_MUSTPASS(-1 != voe_base_->DeleteChannel(aChannel)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - - ANL(); - AOK(); - ANL(); - ANL(); - - // ------------------------------------------------------------------------ - // >> StartReceive - // >> StopReceive - // - // State: VE initialized, no existing channels - TEST(StartReceive); - ANL(); - TEST(StopReceive); - ANL(); - - // call without existing channel - TEST_MUSTPASS(!voe_base_->StartReceive(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - TEST_MUSTPASS(!voe_base_->StopReceive(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - - int ch = voe_base_->CreateChannel(); - - // must register external transport first. - TEST_MUSTPASS(!voe_base_->StartReceive(0)); - MARK(); - - ExtendedTestTransport* ptrTransport = new ExtendedTestTransport(voe_network); - TEST_MUSTPASS(voe_network ->RegisterExternalTransport(ch, *ptrTransport)); - MARK(); // should work this time - - // enable again (should work) - TEST_MUSTPASS(voe_base_->StartReceive(0)); - MARK(); - - // Stop/Start (should work) - TEST_MUSTPASS(voe_base_->StopReceive(0)); - MARK(); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - MARK(); - - // Verify in loopback - TEST_MUSTPASS(voe_base_->StartSend(ch)); - Play(ch, 1000, true, true); - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - MARK(); - - voe_base_->DeleteChannel(0); - delete ptrTransport; - ch = voe_base_->CreateChannel(); - - // Ensure that it is OK to add delay between SetLocalReceiver and StarListen - TEST_LOG("\nspeak after 2 seconds and ensure that no delay is added:\n"); - - Sleep(2000, true); // adding emulated delay here - - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - Play(ch, 2000, true, true); - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - - TEST_MUSTPASS(voe_base_->DeleteChannel(ch)); - ANL(); - - // Multi-channel tests - - for (i = 0; i < kTestMaxNumChannels; i++) { - ch = voe_base_->CreateChannel(); - MARK(); - } - for (i = 0; i < kTestMaxNumChannels; i++) { - voe_base_->DeleteChannel(i); - MARK(); - } - for (i = 0; i < kTestMaxNumChannels; i++) { - ch = voe_base_->CreateChannel(); - ExtendedTestTransport* ptrTransport = - new ExtendedTestTransport(voe_network); - TEST_MUSTPASS(voe_network ->RegisterExternalTransport(ch, *ptrTransport)); - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - MARK(); - voe_base_->DeleteChannel(ch); - delete ptrTransport; - } - - ANL(); - AOK(); - ANL(); - ANL(); - - // >> end of StartReceive/StopReceive - // ------------------------------------------------------------------------ - - // ------------------------------------------------------------------------ - // >> StartPlayout - // >> StopPlayout - // - // State: VE initialized, no existing channels - TEST(StartPlayout); - ANL(); - TEST(StopPlayout); - ANL(); - - // call without existing channel - TEST_MUSTPASS(!voe_base_->StartPlayout(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - TEST_MUSTPASS(!voe_base_->StopPlayout(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - - ch = voe_base_->CreateChannel(); - - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - MARK(); - - voe_base_->DeleteChannel(ch); - - // Multi-channel tests - for (i = 0; i < kTestMaxNumChannels; i++) { - ch = voe_base_->CreateChannel(); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - MARK(); - } - for (i = 0; i < kTestMaxNumChannels; i++) { - TEST_MUSTPASS(voe_base_->StopPlayout(i)); - MARK(); - voe_base_->DeleteChannel(i); - } - for (i = 0; i < kTestMaxNumChannels; i++) { - ch = voe_base_->CreateChannel(); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - MARK(); - voe_base_->DeleteChannel(ch); - } - - ANL(); - AOK(); - ANL(); - ANL(); - - // >> end of StartPlayout/StopPlayout - // ------------------------------------------------------------------------ - - // ------------------------------------------------------------------------ - // >> StartSend - // >> StopSend - // - // State: VE initialized, no existing channels - TEST(StartSend); - ANL(); - TEST(StopSend); - ANL(); - - // call without existing channel - TEST_MUSTPASS(!voe_base_->StartSend(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - TEST_MUSTPASS(!voe_base_->StopSend(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - - ch = voe_base_->CreateChannel(); - - // call without initialized destination - TEST_MUSTPASS(!voe_base_->StartSend(ch)); - MARK(); - TEST_ERROR(VE_DESTINATION_NOT_INITED); - - - // initialize destination and try again (should work even without existing - // sockets) - ptrTransport = new ExtendedTestTransport(voe_network); - TEST_MUSTPASS(voe_network ->RegisterExternalTransport(ch, *ptrTransport)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - MARK(); - SleepMs(100); - - TEST_MUSTPASS(voe_base_->StopSend(ch)); - MARK(); - - voe_base_->DeleteChannel(ch); - delete ptrTransport; - ch = voe_base_->CreateChannel(); - - ptrTransport = new ExtendedTestTransport(voe_network); - TEST_MUSTPASS(voe_network ->RegisterExternalTransport(ch, *ptrTransport)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - Play(ch, 2000, true, true); - TEST_MUSTPASS(voe_base_->StopSend(ch)); - MARK(); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - voe_base_->DeleteChannel(ch); - - ANL(); - AOK(); - ANL(); - ANL(); - - // >> end of StartSend/StopSend - // ------------------------------------------------------------------------ - - ////////////////////////////// - // SetNetEQPlayoutMode - // GetNetEQPlayoutMode - TEST(SetNetEQPlayoutMode); - ANL(); - TEST(GetNetEQPlayoutMode); - ANL(); - - NetEqModes mode; - - ch = voe_base_->CreateChannel(); - - // invalid function calls (should fail) - TEST_MUSTPASS(!voe_base_->GetNetEQPlayoutMode(ch+1, mode)); - MARK(); - TEST_MUSTPASS(!voe_base_->SetNetEQPlayoutMode(ch+1, kNetEqDefault)); - MARK(); - - // verify default mode (should be kNetEqDefault) - TEST_MUSTPASS(voe_base_->GetNetEQPlayoutMode(ch, mode)); - MARK(); - TEST_MUSTPASS(mode != kNetEqDefault); - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(ch, kNetEqStreaming)); - MARK(); - voe_base_->DeleteChannel(ch); - - // ensure that default mode is set as soon as new channel is created - ch = voe_base_->CreateChannel(); - TEST_MUSTPASS(voe_base_->GetNetEQPlayoutMode(ch, mode)); - MARK(); - TEST_MUSTPASS(mode != kNetEqDefault); - voe_base_->DeleteChannel(ch); - - // verify Set/Get for all supported modes and max number of channels - for (i = 0; i < kTestMaxNumChannels; i++) { - ch = voe_base_->CreateChannel(); - - // verify Set/Get for all supported modes - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(i, kNetEqDefault)); - MARK(); - TEST_MUSTPASS(voe_base_->GetNetEQPlayoutMode(i, mode)); - MARK(); - TEST_MUSTPASS(mode != kNetEqDefault); - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(i, kNetEqStreaming)); - MARK(); - TEST_MUSTPASS(voe_base_->GetNetEQPlayoutMode(i, mode)); - MARK(); - TEST_MUSTPASS(mode != kNetEqStreaming); - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(i, kNetEqFax)); - MARK(); - TEST_MUSTPASS(voe_base_->GetNetEQPlayoutMode(i, mode)); - MARK(); - TEST_MUSTPASS(mode != kNetEqFax); - SleepMs(50); - } - - for (i = 0; i < kTestMaxNumChannels; i++) { - voe_base_->DeleteChannel(i); - } - - ANL(); - AOK(); - ANL(); - ANL(); - - // Verify real-time performance for all playout modes in full duplex - - ch = voe_base_->CreateChannel(); - - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(voe_network, ch)); - - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(ch, kNetEqDefault)); - MARK(); - TEST_LOG("\nenjoy full duplex using kNetEqDefault playout mode...\n"); - PAUSE - - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(ch, kNetEqStreaming)); - MARK(); - TEST_LOG("\nenjoy full duplex using kNetEqStreaming playout mode...\n"); - PAUSE - - TEST_MUSTPASS(voe_base_->SetNetEQPlayoutMode(ch, kNetEqFax)); - MARK(); - TEST_LOG("\nenjoy full duplex using kNetEqFax playout mode...\n"); - PAUSE - - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - voe_base_->DeleteChannel(ch); - - ANL(); - AOK(); - ANL(); - ANL(); - - ///////////////////// - // Full duplex tests - - ch = voe_base_->CreateChannel(); // We must delete this channel first to be able - // to reuse port 12345 - -// start with default case, also test non-default RTCP port -#ifdef _TEST_RTP_RTCP_ - TEST_MUSTPASS(rtp->SetRTCP_CNAME(ch, "Johnny")); -#endif - voice_channel_transport.reset(new VoiceChannelTransport(voe_network, ch)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - - TEST_LOG("full duplex is now activated (1)\n"); - TEST_LOG("waiting for RTCP packet...\n"); - - SleepMs(7000); // Make sure we get RTCP packet - PAUSE; - -// Verify that we got RTCP packet from correct source port -#ifdef _TEST_RTP_RTCP_ - char tmpStr[64] = { 0 }; - TEST_MUSTPASS(rtp->GetRemoteRTCP_CNAME(ch, tmpStr)); - TEST_MUSTPASS(_stricmp("Johnny", tmpStr)); -#endif - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - // Call StartSend before StartReceive - TEST_MUSTPASS(voe_base_->StartSend(ch)); - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - - TEST_LOG("\nfull duplex is now activated (2)\n"); - - PAUSE - - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - // Try again using same ports - TEST_MUSTPASS(voe_base_->StartSend(ch)); - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - - TEST_LOG("\nfull duplex is now activated (3)\n"); - TEST_LOG("waiting for RTCP packet...\n"); - - SleepMs(7000); // Make sure we get RTCP packet - PAUSE - - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - voe_base_->DeleteChannel(ch); - - ch = voe_base_->CreateChannel(); - voice_channel_transport.reset(new VoiceChannelTransport(voe_network, ch)); - - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - - TEST_LOG("\nfull duplex is now activated (5)\n"); - - PAUSE - - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - // restart call again - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - - TEST_LOG("\nfull duplex is now activated (6)\n"); - - PAUSE - - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - - // new channel and new port - ch = voe_base_->CreateChannel(); - - scoped_ptr voice_channel_transport_2( - new VoiceChannelTransport(voe_network, ch)); - - voice_channel_transport_2->SetSendDestination("127.0.0.1", 33221); - voice_channel_transport_2->SetLocalReceiver(33221); - - TEST_MUSTPASS(voe_base_->StartReceive(ch)); - TEST_MUSTPASS(voe_base_->StartPlayout(ch)); - TEST_MUSTPASS(voe_base_->StartSend(ch)); - - TEST_LOG("\nfull duplex is now activated (8)\n"); - - PAUSE - - ANL(); - AOK(); - ANL(); - ANL(); - -////////////////////// -// Trace filter tests - -#ifdef _USE_EXTENDED_TRACE_ - TEST(SetTraceFilter); ANL(); - - TEST_MUSTPASS(VoiceEngine::SetTraceFile(GetFilename("" - "VoEBase_trace_filter.txt").c_str())); MARK(); - SleepMs(100); - - // Test a few different filters, verify in trace file - // Each SetTraceFilter calls should be seen once, no more, no less - TEST_MUSTPASS(VoiceEngine::SetTraceFilter(kTraceNone)); MARK(); - SleepMs(300); - // API call and info should NOT be seen in log - TEST_MUSTPASS(voe_base_->SetOnHoldStatus(0, true)); MARK(); - // API call and error should NOT be seen in log - TEST_MUSTPASS(!voe_base_->SetOnHoldStatus(999, true)); MARK(); - - TEST_MUSTPASS(VoiceEngine::SetTraceFilter(kTraceApiCall | - kTraceCritical | - kTraceError | - kTraceWarning)); MARK(); - SleepMs(300); - // API call should and info should NOT be seen in log - TEST_MUSTPASS(voe_base_->SetOnHoldStatus(0, false)); MARK(); - // API call and error should be seen in log - TEST_MUSTPASS(!voe_base_->SetOnHoldStatus(999, true)); MARK(); - - TEST_MUSTPASS(VoiceEngine::SetTraceFilter(kTraceApiCall | kTraceInfo)); - MARK(); - SleepMs(300); - // API call and info should be seen in log - TEST_MUSTPASS(voe_base_->SetOnHoldStatus(0, true)); MARK(); - // API call should and error should NOT be seen in log - TEST_MUSTPASS(!voe_base_->SetOnHoldStatus(999, true)); MARK(); - - // Back to default - TEST_MUSTPASS(VoiceEngine::SetTraceFilter(kTraceAll)); MARK(); - SleepMs(300); - - AOK(); ANL(); -#endif - - // ------------------------------------------------------------------------ - // >> Multiple instance testing - // - // We should support 8 instances simultaneously - // and at least one should be able to have a call running - - // One instance is already created - VoiceEngine* instVE[7]; - VoEBase* baseVE[7]; - for (int instNum = 0; instNum < 7; instNum++) { - instVE[instNum] = VoiceEngine::Create(); - baseVE[instNum] = VoEBase::GetInterface(instVE[instNum]); - TEST_MUSTPASS(baseVE[instNum]->Init()); - TEST_MUSTPASS(baseVE[instNum]->CreateChannel()); - } - - TEST_LOG("Created 7 more instances of VE, make sure audio is ok...\n\n"); - PAUSE - - for (int instNum = 0; instNum < 7; instNum++) { - TEST_MUSTPASS(baseVE[instNum]->DeleteChannel(0)); - TEST_MUSTPASS(baseVE[instNum]->Terminate()); - baseVE[instNum]->Release(); - VoiceEngine::Delete(instVE[instNum]); - } - - AOK(); - ANL(); - - ////////////// - // Close down - TEST_MUSTPASS(voe_base_->StopSend(ch)); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - TEST_MUSTPASS(voe_base_->StopReceive(ch)); - TEST_MUSTPASS(voe_base_->DeleteChannel(ch)); - - voe_base_->DeleteChannel(0); - TEST_MUSTPASS(voe_base_->Terminate()); - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestCallReport -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestCallReport() { - // Get required sub-API pointers - VoEBase* voe_base_ = _mgr.BasePtr(); - VoECallReport* report = _mgr.CallReportPtr(); - VoEFile* file = _mgr.FilePtr(); - VoEAudioProcessing* apm = _mgr.APMPtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - - PrepareTest("CallReport"); - - // check if this interface is supported - if (!report) { - TEST_LOG("VoECallReport is not supported!"); - return -1; - } - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - GetFilename("VoECallReport_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(voe_network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); - - /////////////////////////// - // Actual test starts here - TEST(ResetCallReportStatistics); - ANL(); - TEST_MUSTPASS(!report->ResetCallReportStatistics(-2)); - MARK(); // not OK - TEST_MUSTPASS(!report->ResetCallReportStatistics(1)); - MARK(); // not OK - TEST_MUSTPASS(report->ResetCallReportStatistics(0)); - MARK(); // OK - TEST_MUSTPASS(report->ResetCallReportStatistics(-1)); - MARK(); // OK - AOK(); - ANL(); - - bool enabled = false; - EchoStatistics echo; - TEST(GetEchoMetricSummary); - ANL(); - TEST_MUSTPASS(apm->GetEcMetricsStatus(enabled)); - TEST_MUSTPASS(enabled != false); - TEST_MUSTPASS(apm->SetEcMetricsStatus(true)); - TEST_MUSTPASS(report->GetEchoMetricSummary(echo)); // all outputs will be - // -100 in loopback (skip further tests) - AOK(); - ANL(); - - // TODO(xians): investigate the cause of test failure before enabling. - /* - StatVal delays; - TEST(GetRoundTripTimeSummary); - ANL(); - // All values should be >=0 since RTCP is now on - TEST_MUSTPASS(report->GetRoundTripTimeSummary(0, delays)); - MARK(); - TEST_MUSTPASS(delays.min == -1); - TEST_MUSTPASS(delays.max == -1); - TEST_MUSTPASS(delays.average == -1); - rtp_rtcp->SetRTCPStatus(0, false); - // All values should be -1 since RTCP is off - TEST_MUSTPASS(report->GetRoundTripTimeSummary(0, delays)); - MARK(); - TEST_MUSTPASS(delays.min != -1); - TEST_MUSTPASS(delays.max != -1); - TEST_MUSTPASS(delays.average != -1); - rtp_rtcp->SetRTCPStatus(0, true); - AOK(); - ANL(); - */ - - TEST(WriteReportToFile); - ANL(); - - // Greek and Coptic (see http://www.utf8-chartable.de/unicode-utf8-table.pl) - char fileNameUTF8[64]; - - fileNameUTF8[0] = (char)0xce; - fileNameUTF8[1] = (char)0xba; - fileNameUTF8[2] = (char)0xce; - fileNameUTF8[3] = (char)0xbb; - fileNameUTF8[4] = (char)0xce; - fileNameUTF8[5] = (char)0xbd; - fileNameUTF8[6] = (char)0xce; - fileNameUTF8[7] = (char)0xbe; - fileNameUTF8[8] = '.'; - fileNameUTF8[9] = 't'; - fileNameUTF8[10] = 'x'; - fileNameUTF8[11] = 't'; - fileNameUTF8[12] = 0; - - TEST_MUSTPASS(!report->WriteReportToFile(NULL)); - MARK(); - TEST_MUSTPASS(report->WriteReportToFile("call_report.txt")); - MARK(); - TEST_MUSTPASS(report->WriteReportToFile(fileNameUTF8)); - MARK(); // should work with UTF-8 as well (κλνξ.txt) - AOK(); - ANL(); - - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestCodec -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestCodec() { - PrepareTest("Codec"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoECodec* codec = _mgr.CodecPtr(); - VoEFile* file = _mgr.FilePtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS( - VoiceEngine::SetTraceFile(GetFilename("VoECodec_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - int channel_id; - TEST_MUSTPASS(voe_base_->Init()); - channel_id = voe_base_->CreateChannel(); - TEST_MUSTPASS(channel_id == -1); - - ExtendedTestTransport* ptrTransport = new ExtendedTestTransport(voe_network); - TEST_MUSTPASS( - voe_network->RegisterExternalTransport(channel_id, *ptrTransport)); - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartSend(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - - /////////////////////////// - // Actual test starts here - - int i; - int err; - - CodecInst cinst; - - ///////////////////////// - // GetNumOfCodecs - - int nCodecs; - - TEST(GetNumOfCodecs); - ANL(); - // validate #codecs - nCodecs = codec->NumOfCodecs(); - MARK(); - TEST_MUSTPASS(nCodecs < 0); - AOK(); - ANL(); - - /////////////////// - // GetCodec - TEST(GetCodec); - ANL(); - // scan all supported codecs - nCodecs = codec->NumOfCodecs(); - for (int index = 0; index < nCodecs; index++) { - TEST_MUSTPASS(codec->GetCodec(index, cinst)); - TEST_LOG("[%2d] %16s: fs=%6d, pt=%4d, rate=%7d, ch=%2d, size=%5d", - index, - cinst.plname, - cinst.plfreq, - cinst.pltype, - cinst.rate, - cinst.channels, - cinst.pacsize); - if (cinst.pltype == -1) { - TEST_LOG(" <= NOTE pt=-1\n"); - } else { - ANL(); - } - } - - // ensure that an invalid index parameter is detected - TEST_MUSTPASS(-1 != codec->GetCodec(-1, cinst)); - nCodecs = codec->NumOfCodecs(); - TEST_MUSTPASS(-1 != codec->GetCodec(nCodecs, cinst)); - MARK(); - // ensure that error code is VE_INVALID_LISTNR - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_LISTNR); - AOK(); - ANL(); - - /////////////////////// - // GetSendCodec - TEST(GetSendCodec); - ANL(); - - CodecInst defaultCodec; - - // check the channel parameter - TEST_MUSTPASS(-1 != codec->GetSendCodec(kTestMaxNumChannels - 1, cinst)); - MARK(); // not created - TEST_MUSTPASS(-1 != codec->GetSendCodec(kTestMaxNumChannels, cinst)); - MARK(); // out of range - TEST_MUSTPASS(-1 != codec->GetSendCodec(-1, cinst)); - MARK(); // out of range - TEST_MUSTPASS(codec->GetSendCodec(channel_id, cinst)); - MARK(); // OK - - nCodecs = codec->NumOfCodecs(); - for (int index = 0; index < nCodecs; index++) { - TEST_MUSTPASS(codec->GetCodec(index, defaultCodec)); - if (codec->SetSendCodec(channel_id, defaultCodec) == 0) { - TEST_MUSTPASS(codec->GetSendCodec(channel_id, cinst)); - MARK(); - // TEST_LOG("[%2d] %s: fs=%d, pt=%d, rate=%d, ch=%d, size=%d\n", - // index, cinst.plname, cinst.plfreq, cinst.pltype, cinst.rate, - // cinst.channels, cinst.pacsize); - TEST_MUSTPASS(cinst.pacsize != defaultCodec.pacsize); - TEST_MUSTPASS(cinst.plfreq != defaultCodec.plfreq); - TEST_MUSTPASS(cinst.pltype != defaultCodec.pltype); - TEST_MUSTPASS(cinst.rate != defaultCodec.rate); - TEST_MUSTPASS(cinst.channels != defaultCodec.channels); - } - } - - ANL(); - AOK(); - ANL(); - - /////////////////////// - // SetSendCodec - TEST(SetSendCodec); - ANL(); - - // --- Scan all supported codecs and set default parameters - - nCodecs = codec->NumOfCodecs(); - for (int index = 0; index < nCodecs; index++) { - // Get default (ACM) settings - TEST_MUSTPASS(codec->GetCodec(index, cinst)); - defaultCodec = cinst; - TEST_LOG("[%2d] %s (default): fs=%d, pt=%d, rate=%d, ch=%d, size=%d\n", - index, - cinst.plname, - cinst.plfreq, - cinst.pltype, - cinst.rate, - cinst.channels, - cinst.pacsize); - - // Verify invalid codec names - if (!_stricmp("CN", cinst.plname) || - !_stricmp("telephone-event", cinst.plname) || - !_stricmp("red", cinst.plname)) { - // default settings for invalid payload names (should give - // VE_INVALID_PLNAME) - TEST_MUSTPASS(!codec->SetSendCodec(channel_id, cinst)); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - continue; - } - - // If we build the ACM with more codecs than we have payload types, - // some codecs will be given -1 as default payload type. This is a fix - // to ensure that we can complete these tests also for this case. - if (cinst.pltype == -1) { - cinst.pltype = 97; - } - - // --- Default settings - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - // --- Packet size - TEST_LOG("\npacsize : "); - - for (int pacsize = 80; pacsize < 1440; pacsize += 80) { - cinst.pacsize = pacsize; - if (-1 != codec->SetSendCodec(channel_id, cinst)) { - // log valid packet size - TEST_LOG("%d ", pacsize); - } else { - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - } - cinst.pacsize = defaultCodec.pacsize; - - // --- Audio channels (1/mono or 2/stereo) - TEST_LOG("\nchannels: "); - for (int channels = 1; channels < 4; channels++) { - cinst.channels = channels; - if (-1 != codec->SetSendCodec(channel_id, cinst)) { - // Valid channels currently. - // 1 should always be OK for all codecs. - // 2 is OK for stereo codecs and some of mono codecs. - TEST_LOG("%d ", channels); - } else { - // Invalide channels. Currently there should be two cases: - // 2 would fail to some mono codecs with VE_CANNOT_SET_SEND_CODEC; - // 3(and higher) should always fail with VE_INVALID_ARGUMENT. - err = voe_base_->LastError(); - ASSERT_TRUE((err == VE_INVALID_ARGUMENT) || - (err == VE_CANNOT_SET_SEND_CODEC)); - } - } - cinst.channels = defaultCodec.channels; - - // --- Payload frequency - TEST_LOG("\nplfreq : "); - cinst.plfreq = defaultCodec.plfreq; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.plfreq); - - // --- Payload name - - strcpy(cinst.plname, "INVALID"); - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - // ensure that error code is VE_INVALID_PLNAME - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - - // restore default plname - strcpy(cinst.plname, defaultCodec.plname); - - // --- Payload type (dynamic range is 96-127) - TEST_LOG("\npltype : "); - // All PT should be OK, test a few different - cinst.pltype = defaultCodec.pltype; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.pltype); - cinst.pltype = defaultCodec.pltype + 1; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.pltype); - const int valid_pltypes[4] = {0, 96, 117, 127}; - for (i = 0; i < static_cast(sizeof(valid_pltypes) / sizeof(int)); - i++) { - cinst.pltype = valid_pltypes[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.pltype); - } - // Restore default - cinst.pltype = defaultCodec.pltype; - - // --- Codec rate - TEST_LOG("\nrate : "); - if (_stricmp("isac", cinst.plname) == 0) { - // ISAC - if (cinst.plfreq == 16000) { - int valid_rates[3] = {-1, 10000, 32000}; - // failed in RegisterPayload when rate is 32000 - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - cinst.rate = 0; // invalid - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - // ensure that error code is VE_CANNOT_SET_SEND_CODEC - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - ANL(); - } else // ISACSWB - { - // rate changing fails in RegisterPayload - int valid_rates[8] = {-1, 10000, 25000, 32000, - 35000, 45000, 50000, 52000}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - int invalid_rates[3] = {0, 5000, 57000}; // invalid - for (i = 0; i < static_cast(sizeof(invalid_rates) / sizeof(int)); - i++) { - cinst.rate = invalid_rates[i]; - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - // ensure that error code is VE_CANNOT_SET_SEND_CODEC - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - } - ANL(); - } - } else if (_stricmp("amr", cinst.plname) == 0) { - int valid_rates[8] = {4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - ANL(); - } else if (_stricmp("g7291", cinst.plname) == 0) { - int valid_rates[12] = {8000, 12000, 14000, 16000, 18000, 20000, - 22000, 24000, 26000, 28000, 30000, 32000}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - ANL(); - } else if (_stricmp("amr-wb", cinst.plname) == 0) { - int valid_rates[9] = {7000, 9000, 12000, 14000, 16000, - 18000, 20000, 23000, 24000}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - TEST_LOG(" <=> "); - ANL(); - } else if (_stricmp("speex", cinst.plname) == 0) { - // Valid speex rates are > 2000, testing some of them here - int valid_rates[9] = {2001, 4000, 7000, 11000, 15000, - 20000, 25000, 33000, 46000}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - cinst.rate = 2000; // invalid - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - ANL(); - } else if (_stricmp("silk", cinst.plname) == 0) { - // Valid Silk rates are 6000 - 40000, listing some of them here - int valid_rates[7] = {6000, 10000, 15000, 20000, 25000, 32000, 40000}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - cinst.rate = 5999; // invalid - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - cinst.rate = 40001; // invalid - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - ANL(); - } else if (STR_CASE_CMP("opus", cinst.plname) == 0) { - // Valid Opus rates are 6000 - 510000, listing some of them here - int valid_rates[7] = {6000, 24000, 36000, 48000, 64000, 120000, 400000}; - for (i = 0; i < static_cast(sizeof(valid_rates) / sizeof(int)); - i++) { - cinst.rate = valid_rates[i]; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - } - cinst.rate = 5999; // invalid - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - cinst.rate = 511000; // invalid - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)) { - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - ANL(); - } else { - // Use default rate for all other codecs. - cinst.rate = defaultCodec.rate; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_LOG("%d ", cinst.rate); - cinst.rate = defaultCodec.rate + 17; - TEST_MUSTPASS(!codec->SetSendCodec(channel_id, cinst)); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - ANL(); - } - cinst.rate = defaultCodec.rate; - - // run some extra tests for L16 - if (_stricmp("l16", cinst.plname) == 0) { - if (8000 == cinst.plfreq) { - // valid pacsizes: 80, 160, 240, 320 - cinst.pacsize = 480; // only supported in combination with 16kHz - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - cinst.pacsize = 640; // only supported in combination with 16kHz - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } else { - // valid pacsizes: 160, 320, 480, 640 - cinst.pacsize = 80; // only supported in combination with 8kHz - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - cinst.pacsize = 240; // only supported in combination with 8kHz - TEST_MUSTPASS(-1 != codec->SetSendCodec(channel_id, cinst)); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - } - } - ANL(); - } // for (int index = 0; index < nCodecs; index++) - - // restore PCMU - const CodecInst tmp = {0, "PCMU", 8000, 160, 1, 64000}; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, tmp)); - - ANL(); - AOK(); - ANL(); - - /////// - // VAD - - const int VADSleep = 0; - - bool disabledDTX; - VadModes mode; - bool enabled; - - // verify default settings (should be OFF, kVadConventional and DTX enabled) - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(enabled != false); - TEST_MUSTPASS(mode != kVadConventional); - TEST_MUSTPASS(disabledDTX != true); - - // enable default VAD settings - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(enabled != true); - TEST_MUSTPASS(mode != kVadConventional); - TEST_MUSTPASS(disabledDTX != false); - SleepMs(VADSleep); - - // set kVadConventional mode - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true, kVadConventional)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(mode != kVadConventional); - SleepMs(VADSleep); - - // set kVadAggressiveLow mode - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true, kVadAggressiveLow)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(mode != kVadAggressiveLow); - SleepMs(VADSleep); - - // set kVadAggressiveMid mode - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true, kVadAggressiveMid)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(mode != kVadAggressiveMid); - SleepMs(VADSleep); - - // set kVadAggressiveMid mode - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true, kVadAggressiveHigh)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(mode != kVadAggressiveHigh); - SleepMs(VADSleep); - - // turn DTX OFF (audio should not be affected by VAD decisions) - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true, kVadConventional, true)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(disabledDTX != true); - SleepMs(VADSleep); - - // try to enable DTX again (should fail since VAD is disabled) - TEST_MUSTPASS( - codec->SetVADStatus(channel_id, false, kVadConventional, false)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(disabledDTX == false); - SleepMs(VADSleep); - - // disable VAD - TEST_MUSTPASS(codec->SetVADStatus(channel_id, false)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(enabled != false); - SleepMs(VADSleep); - - // restore default VAD - TEST_MUSTPASS(codec->SetVADStatus(channel_id, true)); - TEST_MUSTPASS(codec->SetVADStatus(channel_id, false)); - TEST_MUSTPASS(codec->GetVADStatus(channel_id, enabled, mode, disabledDTX)); - TEST_LOG( - "VAD: enabled=%d, mode=%d, disabledDTX=%d\n", enabled, mode, disabledDTX); - TEST_MUSTPASS(enabled != false); - TEST_MUSTPASS(mode != kVadConventional); - TEST_MUSTPASS(disabledDTX != true); - SleepMs(VADSleep); - - AOK(); - ANL(); - ANL(); - - ////////////////////// - // GetRecCodec - TEST(GetRecCodec); - ANL(); - - // stop all streaming first - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopSend(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - - // start loopback streaming (PCMU is default) - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StartSend(channel_id)); - SleepMs(100); // ensure that at least one packets is received - - // scan all supported and valid codecs - CodecInst newCodec; - for (i = 0; i < codec->NumOfCodecs(); i++) { - TEST_MUSTPASS(codec->GetCodec(i, newCodec)); - // test all valid send codecs - if (!_stricmp("red", newCodec.plname) || !_stricmp("cn", newCodec.plname) || - !_stricmp("telephone-event", newCodec.plname)) { - continue; // Ignore these - } - if (-1 != codec->SetSendCodec(channel_id, newCodec)) { - SleepMs(150); - // verify correct detection - TEST_MUSTPASS(codec->GetRecCodec(channel_id, cinst)); - TEST_LOG("%s %s ", newCodec.plname, cinst.plname); - TEST_MUSTPASS(_stricmp(newCodec.plname, cinst.plname) != 0); - TEST_MUSTPASS(cinst.pltype != newCodec.pltype); - TEST_MUSTPASS(cinst.plfreq != newCodec.plfreq); - } - } - - // stop streaming - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopSend(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - - ANL(); - AOK(); - ANL(); - ANL(); - -#ifdef WEBRTC_CODEC_AMR - ////////////////////////// - // SetAMREncFormat - - // Fresh channel - TEST_MUSTPASS(voe_base_->DeleteChannel(channel_id)); - TEST_MUSTPASS(voe_base_->CreateChannel()); - - TEST(SetAMREncFormat); - ANL(); - - // set another codec which is not AMR - TEST_MUSTPASS(codec->GetCodec(channel_id, cinst)); - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - // try to change the encode format, tests should fail - TEST_MUSTPASS(-1 != codec->SetAMREncFormat(channel_id)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMREncFormat(channel_id, kRfc3267BwEfficient)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMREncFormat(channel_id, kRfc3267OctetAligned)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMREncFormat(channel_id, kRfc3267FileStorage)); - MARK(); - - // set AMR as encoder - strcpy(cinst.plname, "AMR"); - cinst.channels = 1; - cinst.plfreq = 8000; - cinst.rate = 12200; - cinst.pltype = 112; - cinst.pacsize = 160; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - // try to change the encode format, tests should pass - TEST_MUSTPASS(codec->SetAMREncFormat(channel_id)); - MARK(); - TEST_MUSTPASS(codec->SetAMREncFormat(channel_id, kRfc3267BwEfficient)); - MARK(); - TEST_MUSTPASS(codec->SetAMREncFormat(channel_id, kRfc3267OctetAligned)); - MARK(); - TEST_MUSTPASS(codec->SetAMREncFormat(channel_id, kRfc3267FileStorage)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMREncFormat(-1)); - MARK(); - TEST_MUSTPASS(codec->SetAMREncFormat(channel_id)); - MARK(); // restore default - - ANL(); - AOK(); - ANL(); - - ////////////////////////// - // SetAMRDecFormat - - TEST(SetAMRDecFormat); - ANL(); - - // It should not be possible to set AMR dec format before valid AMR decoder - // is registered - TEST_MUSTPASS(!codec->SetAMRDecFormat(channel_id)); - MARK(); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_AUDIO_CODING_MODULE_ERROR); - - // Ensure that ACM::RegisterReceiveCodec(AMR) is called - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - - // All these tests should now pass - TEST_MUSTPASS(codec->SetAMRDecFormat(channel_id)); - MARK(); - TEST_MUSTPASS(codec->SetAMRDecFormat(channel_id, kRfc3267BwEfficient)); - MARK(); - TEST_MUSTPASS(codec->SetAMRDecFormat(channel_id, kRfc3267OctetAligned)); - MARK(); - TEST_MUSTPASS(codec->SetAMRDecFormat(channel_id, kRfc3267FileStorage)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMRDecFormat(-1)); - MARK(); - TEST_MUSTPASS(codec->SetAMRDecFormat(channel_id)); - MARK(); // restore default - - ANL(); - AOK(); - ANL(); -#endif // #ifdef WEBRTC_CODEC_AMR -#ifdef WEBRTC_CODEC_AMRWB - ////////////////////////// - // SetAMRWbEncFormat - - // Fresh channel - TEST_MUSTPASS(voe_base_->DeleteChannel(channel_id)); - TEST_MUSTPASS(voe_base_->CreateChannel()); - - TEST(SetAMRWbEncFormat); - ANL(); - - // set another codec which is not AMR-wb - TEST_MUSTPASS(codec->GetCodec(channel_id, cinst)); - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - // try to change the encode format, tests should fail - TEST_MUSTPASS(-1 != codec->SetAMRWbEncFormat(channel_id)); - MARK(); - TEST_MUSTPASS(-1 != - codec->SetAMRWbEncFormat(channel_id, kRfc3267BwEfficient)); - MARK(); - TEST_MUSTPASS(-1 != - codec->SetAMRWbEncFormat(channel_id, kRfc3267OctetAligned)); - MARK(); - TEST_MUSTPASS(-1 != - codec->SetAMRWbEncFormat(channel_id, kRfc3267FileStorage)); - MARK(); - - // set AMR-wb as encoder - strcpy(cinst.plname, "AMR-WB"); - cinst.channels = 1; - cinst.plfreq = 16000; - cinst.rate = 20000; - cinst.pltype = 112; - cinst.pacsize = 320; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - // try to change the encode format, tests should pass - TEST_MUSTPASS(codec->SetAMRWbEncFormat(channel_id)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbEncFormat(channel_id, kRfc3267BwEfficient)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbEncFormat(channel_id, kRfc3267OctetAligned)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbEncFormat(channel_id, kRfc3267FileStorage)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMRWbEncFormat(-1)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbEncFormat(channel_id)); - MARK(); // restore default - - ANL(); - AOK(); - ANL(); - - ////////////////////////// - // SetAMRDecFormat - - TEST(SetAMRWbDecFormat); - ANL(); - - // It should not be possible to set AMR dec format before valid AMR decoder - // is registered - TEST_MUSTPASS(!codec->SetAMRWbDecFormat(channel_id)); - MARK(); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_AUDIO_CODING_MODULE_ERROR); - - // Ensure that ACM::RegisterReceiveCodec(AMR) is called - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - - // All these tests should now pass - TEST_MUSTPASS(codec->SetAMRWbDecFormat(channel_id)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbDecFormat(channel_id, kRfc3267BwEfficient)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbDecFormat(channel_id, kRfc3267OctetAligned)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbDecFormat(channel_id, kRfc3267FileStorage)); - MARK(); - TEST_MUSTPASS(-1 != codec->SetAMRWbDecFormat(-1)); - MARK(); - TEST_MUSTPASS(codec->SetAMRWbDecFormat(channel_id)); - MARK(); // restore default - - ANL(); - AOK(); - ANL(); -#endif // #ifdef WEBRTC_CODEC_AMRWB - /////////////////////////////// - // SetSendCNPayloadType - TEST(SetSendCNPayloadType); - ANL(); - - TEST_MUSTPASS(-1 != codec->SetSendCNPayloadType(-1, 0)); - MARK(); // invalid channel - - // Invalid payload range (only dynamic range [96,127] - TEST_MUSTPASS(-1 != codec->SetSendCNPayloadType(channel_id, 0)); - MARK(); // invalid PT - TEST_MUSTPASS(-1 != codec->SetSendCNPayloadType(channel_id, 95)); - MARK(); // invalid PT - TEST_MUSTPASS(-1 != codec->SetSendCNPayloadType(channel_id, 128)); - MARK(); // invalid PT - TEST_MUSTPASS(-1 != codec->SetSendCNPayloadType(channel_id, -1)); - MARK(); // invalid PT - - // Not possible to change PT for 8000 - TEST_MUSTPASS(!codec->SetSendCNPayloadType(channel_id, 96, kFreq8000Hz)); - MARK(); - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_PLFREQ); - - // Try some dynamic for 16000 and 32000 as well - TEST_MUSTPASS(codec->SetSendCNPayloadType(channel_id, 96, kFreq16000Hz)); - MARK(); - TEST_MUSTPASS(codec->SetSendCNPayloadType(channel_id, 96, kFreq32000Hz)); - MARK(); // same should work - TEST_MUSTPASS(codec->SetSendCNPayloadType(channel_id, 127, kFreq16000Hz)); - MARK(); - TEST_MUSTPASS(codec->SetSendCNPayloadType(channel_id, 127, kFreq32000Hz)); - MARK(); - TEST_MUSTPASS(codec->SetSendCNPayloadType(channel_id, 100, kFreq32000Hz)); - MARK(); - - ANL(); - AOK(); - ANL(); - - ///////////////////////////// - // SetRecPayloadType - TEST(SetRecPayloadType); - ANL(); - - // scan all supported and valid codecs without changing payloads - nCodecs = codec->NumOfCodecs(); - for (i = 0; i < nCodecs; i++) { - TEST_MUSTPASS(codec->GetCodec(i, newCodec)); - // If no default payload type is defined, we use 127 - if (-1 == newCodec.pltype) { - newCodec.pltype = 127; - } - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, newCodec)); - MARK(); // use default - newCodec.pltype = 99; - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, newCodec)); - MARK(); // use same PT on all - newCodec.pltype = -1; - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, newCodec)); - MARK(); // deregister all PTs - } - - ANL(); - AOK(); - ANL(); - - ///////////////////////////// - // GetRecPayloadType - TEST(GetRecPayloadType); - ANL(); - - CodecInst extraCodec; - for (i = 0; i < nCodecs; i++) { - // Set defaults - TEST_MUSTPASS(codec->GetCodec(i, newCodec)); - // If no default payload type is defined, we use 127 - if (-1 == newCodec.pltype) { - newCodec.pltype = 127; - } - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, newCodec)); - // TEST_LOG("[%2d] %s (SetRec): fs=%d, pt=%d, rate=%d, ch=%d, size=%d\n", - // i, newCodec.plname, newCodec.plfreq, newCodec.pltype, newCodec.rate, - // newCodec.channels, newCodec.pacsize); - extraCodec.pltype = -1; // don't know this yet - extraCodec.plfreq = newCodec.plfreq; - extraCodec.rate = newCodec.rate; - extraCodec.channels = newCodec.channels; - strcpy(extraCodec.plname, newCodec.plname); - // Verfify that setting is OK - TEST_MUSTPASS(codec->GetRecPayloadType(channel_id, extraCodec)); - // TEST_LOG("[%2d] %s (GetRec): fs=%d, pt=%d, rate=%d, ch=%d, size=%d\n", - // i, extraCodec.plname, extraCodec.plfreq, extraCodec.pltype, - // extraCodec.rate, extraCodec.channels, extraCodec.pacsize); - TEST_MUSTPASS(newCodec.pltype != extraCodec.pltype); - TEST_MUSTPASS(newCodec.plfreq != extraCodec.plfreq); - TEST_MUSTPASS(newCodec.channels != extraCodec.channels); - } - - AOK(); - ANL(); - - //////////////////////////////////////////////////// - // SetRecPayloadType - remove receive codecs - TEST(SetRecPayloadType - removing receive codecs); - ANL(); - - TEST_MUSTPASS(voe_base_->StartSend(channel_id)); - if (file) { - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - channel_id, _mgr.AudioFilename(), true, true)); - } - - // Scan all supported and valid codecs and remove from receiving db, then - // restore - nCodecs = codec->NumOfCodecs(); - for (i = 0; i < nCodecs; i++) { - TEST_MUSTPASS(codec->GetCodec(i, cinst)); - if (!_stricmp("red", cinst.plname) || !_stricmp("cn", cinst.plname) || - !_stricmp("telephone-event", cinst.plname)) { - continue; // Ignore these - } - TEST_LOG("Testing codec: %s", cinst.plname); - fflush(NULL); - - if (-1 == cinst.pltype) { - // If no default payload type is defined, we use 127, - // codec is not registered for receiving - cinst.pltype = 127; - } else { - // Remove codec - memcpy(&extraCodec, &cinst, sizeof(CodecInst)); - extraCodec.pltype = -1; - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, extraCodec)); - } - - // Set send codec - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - // Verify no audio - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - TEST_LOG(" silence"); - fflush(NULL); - SleepMs(800); - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - - // Restore codec - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - - // Verify audio - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - TEST_LOG(" audio"); - fflush(NULL); - SleepMs(800); - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - - if (127 == cinst.pltype) { - // If no default payload type is defined, i.e. we have set pt to - // 127 above, - // make sure we remove codec from receiving - cinst.pltype = -1; - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - } - - ANL(); - } - - // Remove certain codecs - TEST_LOG("Removing receive codecs:"); - for (i = 0; i < nCodecs; i++) { - TEST_MUSTPASS(codec->GetCodec(i, cinst)); - if (!_stricmp("ipcmwb", cinst.plname) || !_stricmp("pcmu", cinst.plname) || - !_stricmp("eg711a", cinst.plname)) { - TEST_LOG(" %s", cinst.plname); - memcpy(&extraCodec, &cinst, sizeof(CodecInst)); - extraCodec.pltype = -1; - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, extraCodec)); - } - } - ANL(); - - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - - // Test sending all codecs - verify audio/no audio depending on codec - TEST_LOG("Looping through send codecs \n"); - TEST_LOG("Verify that removed codecs are not audible and the other are \n"); - for (i = 0; i < nCodecs; i++) { - TEST_MUSTPASS(codec->GetCodec(i, cinst)); - if (!_stricmp("red", cinst.plname) || !_stricmp("cn", cinst.plname) || - !_stricmp("telephone-event", cinst.plname)) { - continue; // Ignore these - } - TEST_LOG("Testing codec: %s \n", cinst.plname); - - // If no default payload type is defined, we use 127 and set receive - // payload type - if (-1 == cinst.pltype) { - cinst.pltype = 127; - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - } - - // Set send codec - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - // Verify audio/no audio - SleepMs(800); - } - - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - - // Restore codecs - TEST_LOG("Restoring receive codecs:"); - for (i = 0; i < nCodecs; i++) { - TEST_MUSTPASS(codec->GetCodec(i, cinst)); - if (!_stricmp("ipcmwb", cinst.plname) || !_stricmp("pcmu", cinst.plname) || - !_stricmp("eg711a", cinst.plname)) { - TEST_LOG(" %s", cinst.plname); - memcpy(&extraCodec, &cinst, sizeof(CodecInst)); - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - } - } - ANL(); - - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - - // Test sending all codecs - verify audio - TEST_LOG("Looping through send codecs \n"); - TEST_LOG("Verify that all codecs are audible \n"); - for (i = 0; i < nCodecs; i++) { - TEST_MUSTPASS(codec->GetCodec(i, cinst)); - if (!_stricmp("red", cinst.plname) || !_stricmp("cn", cinst.plname) || - !_stricmp("telephone-event", cinst.plname)) { - continue; // Ignore these - } - TEST_LOG("Testing codec: %s \n", cinst.plname); - - // If no default payload type is defined, we use 127 and set receive - // payload type - if (-1 == cinst.pltype) { - cinst.pltype = 127; - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - TEST_MUSTPASS(codec->SetRecPayloadType(channel_id, cinst)); - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - } - - // Set send codec - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - // Verify audio/no audio - SleepMs(800); - } - - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopSend(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - - // Fresh channel - TEST_MUSTPASS(voe_base_->DeleteChannel(channel_id)); - channel_id = voe_base_->CreateChannel(); - TEST_MUSTPASS(channel_id == -1); - -#if defined(WEBRTC_CODEC_ISAC) - - ///////////////////////////////////// - // SetISACInitTargetRate - wb - TEST(SetISACInitTargetRate); - ANL(); - - // set PCMU as sending codec - cinst.channels = 1; - cinst.pacsize = 160; - cinst.plfreq = 8000; - strcpy(cinst.plname, "PCMU"); - cinst.pltype = 0; - cinst.rate = 64000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, 10000)); - MARK(); // should fail since iSAC is not active - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_CODEC_ERROR); - - // set iSAC as sending codec (16kHz) - cinst.channels = 1; - cinst.plfreq = 16000; - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 103; - cinst.rate = -1; // adaptive rate - cinst.pacsize = 480; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id + 1, 10000)); - MARK(); // invalid channel - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, 500)); - MARK(); // invalid target rates (too small) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, 33000)); - MARK(); // invalid target rates (too large) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 10000)); - MARK(); // life is good now - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 0)); - MARK(); // 0 is a valid rate - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 32000)); - MARK(); // try max as well - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 32000, true)); - MARK(); - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 32000, false)); - MARK(); - - cinst.pacsize = 960; // 60ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 32000, false)); - MARK(); - - cinst.rate = 20000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, 32000)); - MARK(); // only works in adaptive mode - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_AUDIO_CODING_MODULE_ERROR); - - cinst.rate = -1; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 32000)); - MARK(); // back to adaptive mode - - ANL(); - AOK(); - ANL(); - - ///////////////////////////////////// - // SetISACInitTargetRate - swb - TEST(ISACSWB SetISACInitTargetRate); - ANL(); - - // set iSAC as sending codec - cinst.channels = 1; - cinst.plfreq = 32000; - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 104; - cinst.rate = -1; // default rate - cinst.pacsize = 960; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id + 1, 10000)); - MARK(); // invalid channel - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, -1)); - MARK(); // invalid target rates (too small) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, -1)); - MARK(); // invalid target rates (too small) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, 500)); - MARK(); // invalid target rates (too small) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACInitTargetRate(channel_id, 57000)); - MARK(); // invalid target rates (valid range is [10000, 56000]) - - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 10000)); - MARK(); - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 0)); - MARK(); - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 56000)); - MARK(); // try max as well - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 56000, true)); - MARK(); - TEST_MUSTPASS(codec->SetISACInitTargetRate(channel_id, 56000, false)); - MARK(); - - ANL(); - AOK(); - ANL(); - - //////////////////////////////// - // SetISACMaxRate - TEST(SetISACMaxRate); - ANL(); - - // set PCMU as sending codec - cinst.channels = 1; - cinst.pacsize = 160; - cinst.plfreq = 8000; - strcpy(cinst.plname, "PCMU"); - cinst.pltype = 0; - cinst.rate = 64000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 48000)); - MARK(); // should fail since iSAC is not active - TEST_MUSTPASS(voe_base_->LastError() != VE_CODEC_ERROR); - - // set iSAC as sending codec - cinst.channels = 1; - cinst.plfreq = 16000; - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 103; - cinst.rate = -1; // adaptive rate - cinst.pacsize = 480; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id + 1, 48000)); - MARK(); // invalid channel - TEST_MUSTPASS(voe_base_->LastError() != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 31900)); - MARK(); // invalid target rates (too small) - TEST_MUSTPASS(voe_base_->LastError() != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 53500)); - MARK(); // invalid target rates (too large) - TEST_MUSTPASS(voe_base_->LastError() != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 32000)); - MARK(); // life is good now - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 40000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 48000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 53400)); - MARK(); // try max as well (default) - - cinst.pacsize = 960; // 60ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 48000)); - MARK(); - - cinst.rate = 20000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 40000)); - MARK(); // also works in non-adaptive mode - - ANL(); - AOK(); - ANL(); - - TEST(ISACSWB SetISACMaxRate); - ANL(); - // set iSAC as sending codec - cinst.channels = 1; - cinst.plfreq = 32000; - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 104; - cinst.rate = 45000; // instantaneous mode - cinst.pacsize = 960; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id + 1, 48000)); - MARK(); // invalid channel - TEST_MUSTPASS(voe_base_->LastError() != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 31900)); - MARK(); // invalid target rates (too small) - TEST_MUSTPASS(voe_base_->LastError() != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 107500)); - MARK(); // invalid target rates (too large) - TEST_MUSTPASS(voe_base_->LastError() != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 32000)); - MARK(); // life is good now - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 40000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 55000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 80000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 107000)); - MARK(); // try max as well (default) - - cinst.rate = -1; // adaptive mode - cinst.pacsize = 960; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id + 1, 48000)); - MARK(); // invalid channel - TEST_MUSTPASS(voe_base_->LastError() != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 31900)); - MARK(); // invalid target rates (too small) - TEST_MUSTPASS(voe_base_->LastError() != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACMaxRate(channel_id, 107500)); - MARK(); // invalid target rates (too large) - TEST_MUSTPASS(voe_base_->LastError() != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 32000)); - MARK(); // life is good now - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 40000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 55000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 80000)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxRate(channel_id, 107000)); - MARK(); // try max as well (default) - - ANL(); - AOK(); - ANL(); - - //////////////////////////////// - // SetISACMaxPayloadSize - TEST(SetISACMaxPayloadSize); - ANL(); - - // set PCMU as sending codec - cinst.channels = 1; - cinst.pacsize = 160; - cinst.plfreq = 8000; - strcpy(cinst.plname, "PCMU"); - cinst.pltype = 0; - cinst.rate = 64000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id, 120)); - MARK(); // should fail since iSAC is not active - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_CODEC_ERROR); - - // set iSAC as sending codec - cinst.channels = 1; - cinst.plfreq = 16000; - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 103; - cinst.rate = -1; // adaptive rate - cinst.pacsize = 480; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id + 1, 120)); - MARK(); // invalid channel - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id, 100)); - MARK(); // invalid size (too small) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id, 410)); - MARK(); // invalid size (too large) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACMaxPayloadSize(channel_id, 200)); - MARK(); // life is good now - TEST_MUSTPASS(codec->SetISACMaxPayloadSize(channel_id, 120)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxPayloadSize(channel_id, 400)); - MARK(); - - ANL(); - AOK(); - ANL(); - - TEST(ISACSWB SetISACMaxPayloadSize); - ANL(); - // set iSAC as sending codec - cinst.channels = 1; - cinst.plfreq = 32000; - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 104; - cinst.rate = 45000; // default rate - cinst.pacsize = 960; // 30ms - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id + 1, 100)); - MARK(); // invalid channel - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id, 100)); - MARK(); // invalid size (too small) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(!codec->SetISACMaxPayloadSize(channel_id, 610)); - MARK(); // invalid size (too large) - err = voe_base_->LastError(); - TEST_MUSTPASS(err != VE_INVALID_ARGUMENT); - - TEST_MUSTPASS(codec->SetISACMaxPayloadSize(channel_id, 200)); - MARK(); // life is good now - TEST_MUSTPASS(codec->SetISACMaxPayloadSize(channel_id, 120)); - MARK(); - TEST_MUSTPASS(codec->SetISACMaxPayloadSize(channel_id, 600)); - MARK(); - - ANL(); - AOK(); - ANL(); - - // set iSAC as sending codec - // set iSAC-wb as sending codec - TEST_MUSTPASS( - voe_network->RegisterExternalTransport(channel_id, *ptrTransport)); - TEST_MUSTPASS(voe_base_->StartPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StartSend(channel_id)); - TEST_MUSTPASS(voe_base_->StartReceive(channel_id)); - std::string file_audio_long16 = - webrtc::test::ResourcePath("voice_engine/audio_long16", "pcm"); - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - channel_id, file_audio_long16.c_str(), true, true)); - cinst.channels = 1; - TEST_LOG("Testing codec: Switch between iSAC-wb and iSAC-swb \n"); - TEST_LOG("Testing codec: iSAC wideband \n"); - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 103; - cinst.rate = -1; // default rate - cinst.pacsize = 480; // 30ms - cinst.plfreq = 16000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - SleepMs(2000); - TEST_LOG(" : iSAC superwideband \n"); - cinst.pltype = 104; - cinst.rate = -1; // default rate - cinst.pacsize = 960; // 30ms - cinst.plfreq = 32000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - SleepMs(2000); - TEST_LOG(" : iSAC wideband \n"); - strcpy(cinst.plname, "ISAC"); - cinst.pltype = 103; - cinst.rate = -1; // default rate - cinst.pacsize = 480; // 30ms - cinst.plfreq = 16000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - SleepMs(2000); - TEST_LOG(" : iSAC superwideband \n"); - cinst.pltype = 104; - cinst.rate = -1; // default rate - cinst.pacsize = 960; // 30ms - cinst.plfreq = 32000; - TEST_MUSTPASS(codec->SetSendCodec(channel_id, cinst)); - SleepMs(2000); - TEST_MUSTPASS(voe_base_->StopPlayout(channel_id)); - TEST_MUSTPASS(voe_base_->StopReceive(channel_id)); - TEST_MUSTPASS(voe_base_->StopSend(channel_id)); -#else - TEST_LOG( - "Skipping extended iSAC API tests - " - "WEBRTC_CODEC_ISAC not defined\n"); -#endif // #if defined(WEBRTC_CODEC_ISAC) - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(channel_id)); - delete ptrTransport; - - TEST_MUSTPASS(voe_base_->DeleteChannel(channel_id)); - TEST_MUSTPASS(voe_base_->Terminate()); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestDtmf -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestDtmf() { - PrepareTest("Dtmf"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEDtmf* dtmf = _mgr.DtmfPtr(); - VoECodec* codec = _mgr.CodecPtr(); - VoEVolumeControl* volume = _mgr.VolumeControlPtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - - std::string output_path = webrtc::test::OutputPath(); - TEST_MUSTPASS( - VoiceEngine::SetTraceFile((output_path + "VoEDtmf_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); - //#endif - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(voe_network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - - /////////////////////////// - // Actual test starts here - - // SetDtmfFeedbackStatus - TEST(SetDtmfFeedbackStatus & GetDtmfFeedbackStatus); - ANL(); - bool dtmfFeedback = false, dtmfDirectFeedback = true; - TEST_MUSTPASS(dtmf->GetDtmfFeedbackStatus(dtmfFeedback, dtmfDirectFeedback)); - TEST_MUSTPASS(!dtmfFeedback); - TEST_MUSTPASS(dtmfDirectFeedback); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0)); - MARK(); - SleepMs(500); - - TEST_MUSTPASS(dtmf->SetDtmfFeedbackStatus(false, false)); - TEST_MUSTPASS(dtmf->GetDtmfFeedbackStatus(dtmfFeedback, dtmfDirectFeedback)); - TEST_MUSTPASS(dtmfFeedback); - TEST_MUSTPASS(dtmfDirectFeedback); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0)); - MARK(); - SleepMs(500); - - TEST_MUSTPASS(dtmf->SetDtmfFeedbackStatus(false, true)); - TEST_MUSTPASS(dtmf->GetDtmfFeedbackStatus(dtmfFeedback, dtmfDirectFeedback)); - TEST_MUSTPASS(dtmfFeedback); - TEST_MUSTPASS(!dtmfDirectFeedback); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0)); - MARK(); - SleepMs(500); - - TEST_MUSTPASS(dtmf->SetDtmfFeedbackStatus(true, false)); - TEST_MUSTPASS(dtmf->GetDtmfFeedbackStatus(dtmfFeedback, dtmfDirectFeedback)); - TEST_MUSTPASS(!dtmfFeedback); - TEST_MUSTPASS(dtmfDirectFeedback); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0)); - MARK(); - SleepMs(500); - - TEST_MUSTPASS(dtmf->SetDtmfFeedbackStatus(true, true)); - TEST_MUSTPASS(dtmf->GetDtmfFeedbackStatus(dtmfFeedback, dtmfDirectFeedback)); - TEST_MUSTPASS(!dtmfFeedback); - TEST_MUSTPASS(!dtmfDirectFeedback); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SetDtmfFeedbackStatus(false, false)); - - AOK(); - ANL(); - - // SendDtmf - TEST(SendDtmf); - ANL(); - - // Fail tests - // Event - // the eventcode is changed to unsigned char, so -1 will be interpreted as - // 255, 256->0 - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, -1, false, 160, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 16, false, 160, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - // Length - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 0, true, 99, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 0, true, 60001, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 20, true, -1, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - // Volume - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 0, true, 160, -1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 0, true, 160, 37)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - // Without sending - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(!dtmf->SendTelephoneEvent(0, 0, true)); - MARK(); - TEST_MUSTPASS(VE_NOT_SENDING != voe_base_->LastError()); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - // Testing Dtmf out-of-band: event, length and volume - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 16, true)); - MARK(); - SleepMs(500); // Flash, not audible - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 100, 10)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 400, 10)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 160, 0)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 160, 36)); - MARK(); - SleepMs(500); - - // Testing Dtmf inband: event, length and volume - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, false)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 15, false)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, false, 100, 10)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, false, 400, 10)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, false, 160, 0)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, false, 160, 36)); - MARK(); - SleepMs(500); - - // Testing other events out-of-band: event and length - // These are not audible - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 17, true, 100, 10)); - MARK(); - SleepMs(200); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 32, true, 100, 10)); - MARK(); - SleepMs(200); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 78, true, 100, 10)); - MARK(); - SleepMs(200); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 255, true, 100, 10)); - MARK(); - SleepMs(200); - // the minimum length is 100 for the telephoneevent - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 32, true, 100, 10)); - MARK(); - SleepMs(200); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 32, true, 1000, 10)); - MARK(); - SleepMs(1200); - - AOK(); - ANL(); - - // PlayDtmfTone - TEST(PlayDtmfTone); - ANL(); - TEST_MUSTPASS(!dtmf->PlayDtmfTone(-1, 200, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->PlayDtmfTone(16, 200, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->PlayDtmfTone(0, 9, 10)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->PlayDtmfTone(0, 200, -1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!dtmf->PlayDtmfTone(0, 200, 37)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - - TEST_MUSTPASS(dtmf->PlayDtmfTone(0)); - MARK(); - SleepMs(500); - // the minimum length fo the DtmfTone is 100 - TEST_MUSTPASS(dtmf->PlayDtmfTone(0, 100, 10)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->PlayDtmfTone(0, 2000, 10)); - MARK(); - SleepMs(2300); - TEST_MUSTPASS(dtmf->PlayDtmfTone(0, 200, 0)); - MARK(); - SleepMs(500); - TEST_MUSTPASS(dtmf->PlayDtmfTone(0, 200, 36)); - MARK(); - SleepMs(500); - - AOK(); - ANL(); - - // SetTelephoneEventDetection - TEST(SetTelephoneEventDetection); - ANL(); - AOK(); - ANL(); - - // Testing sending Dtmf under VAD/CN - TEST(SendDtmf - with VAD enabled); - ANL(); - // Mute mic - TEST_MUSTPASS(volume->SetInputMute(0, true)); - MARK(); - // Enable VAD - TEST_MUSTPASS(codec->SetVADStatus(0, true)); - MARK(); - // Send Dtmf - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 400)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 9, true, 400)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 400)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 9, true, 400)); - MARK(); - SleepMs(1000); - // Switch codec - CodecInst ci; -#if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - ci.channels = 1; - ci.pacsize = 480; - ci.plfreq = 16000; - strcpy(ci.plname, "ISAC"); - ci.pltype = 103; - ci.rate = -1; -#else - ci.pltype = 119; - strcpy(ci.plname, "isaclc"); - ci.plfreq = 16000; - ci.pacsize = 320; - ci.channels = 1; - ci.rate = 40000; -#endif - TEST_MUSTPASS(codec->SetSendCodec(0, ci)); - MARK(); - // Send Dtmf - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 400)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 9, true, 400)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 0, true, 400)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(dtmf->SendTelephoneEvent(0, 9, true, 400)); - MARK(); - SleepMs(1000); - SleepMs(4000); - // Disable VAD - TEST_MUSTPASS(codec->SetVADStatus(0, false)); - MARK(); - // Unmute - TEST_MUSTPASS(volume->SetInputMute(0, false)); - MARK(); - - AOK(); - ANL(); - - // SetSendTelephoneEventPayloadType - TEST(SetSendTelephoneEventPayloadType); - ANL(); - TEST_MUSTPASS(!dtmf->SetSendTelephoneEventPayloadType(0, 128)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - - TEST_MUSTPASS(dtmf->SetSendTelephoneEventPayloadType(0, 96)); - MARK(); - TEST_MUSTPASS(dtmf->SetSendTelephoneEventPayloadType(0, 127)); - MARK(); - TEST_MUSTPASS(dtmf->SetSendTelephoneEventPayloadType(0, 106)); - MARK(); // restore default - - AOK(); - ANL(); - - TEST_MUSTPASS(dtmf->SetDtmfFeedbackStatus(true, false)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestEncryption -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestEncryption() { - PrepareTest("Encryption"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEFile* file = _mgr.FilePtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - GetFilename("VoEEncryption_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(voe_network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); - - /////////////////////////// - // Actual test starts here - - TEST(SRTP disabled - Fail tests); - ANL(); - - // TODO(solenberg): Test should verify that external encryption policy - // registration works, i.e.: - // VoEEncryption* encrypt = _mgr.EncryptionPtr(); - // encrypt->RegisterExternalEncryption() and - // encrypt->DeRegisterExternalEncryption(). - - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestExternalMedia -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestExternalMedia() { - PrepareTest("VoEExternalMedia"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEExternalMedia* xmedia = _mgr.ExternalMediaPtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - - // check if this interface is supported - if (!xmedia) { - TEST_LOG("VoEExternalMedia is not supported!"); - return -1; - } - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - GetFilename("VoEExternalMedia_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(voe_network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - int getLen = 0; - int16_t vector[32000]; - memset(vector, 0, 32000 * sizeof(short)); - -#ifdef WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT - - // ExternalPlayoutGetData - TEST(ExternalPlayoutGetData); - ANL(); - - TEST_MUSTPASS(!xmedia->SetExternalPlayoutStatus(true)); - TEST_MUSTPASS(VE_ALREADY_SENDING != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalPlayoutGetData(vector, 16000, 100, getLen)); - TEST_MUSTPASS(VE_INVALID_OPERATION != voe_base_->LastError()); - - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(xmedia->SetExternalPlayoutStatus(true)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - - TEST_MUSTPASS(xmedia->ExternalPlayoutGetData(vector, 48000, 0, getLen)); - TEST_MUSTPASS(480 != getLen); - SleepMs(10); - TEST_MUSTPASS(xmedia->ExternalPlayoutGetData(vector, 16000, 3000, getLen)); - TEST_MUSTPASS(160 != getLen); - SleepMs(10); - - TEST_MUSTPASS(!xmedia->ExternalPlayoutGetData(vector, 8000, 100, getLen)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalPlayoutGetData(vector, 16000, -1, getLen)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(xmedia->SetExternalPlayoutStatus(false)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - - // SetExternalRecording - TEST(SetExternalRecording); - ANL(); - - TEST_MUSTPASS(!xmedia->SetExternalRecordingStatus(true)); - TEST_MUSTPASS(VE_ALREADY_SENDING != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 160, 16000, 20)); - TEST_MUSTPASS(VE_INVALID_OPERATION != voe_base_->LastError()); - - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(xmedia->SetExternalRecordingStatus(true)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - TEST_MUSTPASS(xmedia->ExternalRecordingInsertData(vector, 480, 48000, 0)); - SleepMs(10); - TEST_MUSTPASS(xmedia->ExternalRecordingInsertData(vector, 640, 16000, 0)); - SleepMs(40); - - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 160, 16000, -1)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 80, 8000, 20)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 0, 16000, 20)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 80, 16000, 20)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 500, 16000, 20)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(xmedia->SetExternalRecordingStatus(false)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - -#else // #ifdef WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT - TEST_MUSTPASS(!xmedia->SetExternalPlayoutStatus(true)); - TEST_MUSTPASS(VE_FUNC_NOT_SUPPORTED != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalPlayoutGetData(vector, 16000, 100, getLen)); - TEST_MUSTPASS(VE_FUNC_NOT_SUPPORTED != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->SetExternalRecordingStatus(true)); - TEST_MUSTPASS(VE_FUNC_NOT_SUPPORTED != voe_base_->LastError()); - TEST_MUSTPASS(!xmedia->ExternalRecordingInsertData(vector, 160, 16000, 20)); - TEST_MUSTPASS(VE_FUNC_NOT_SUPPORTED != voe_base_->LastError()); - -#endif // #ifdef WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - ANL(); - AOK(); - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestFile -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestFile() { - PrepareTest("File"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEFile* file = _mgr.FilePtr(); - VoECodec* codec = _mgr.CodecPtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS( - VoiceEngine::SetTraceFile(GetFilename("VoEFile_trace.txt").c_str())); - MARK(); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(voe_network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - /////////////////////////// - // Actual test starts here - - const int dT(100); - - TEST(StartPlayingFileLocally); - ANL(); - TEST(StopPlayingFileLocally); - ANL(); - - voe_base_->StopPlayout(0); - std::string output_path = webrtc::test::OutputPath(); - std::string file_audio_long16 = - webrtc::test::ResourcePath("voice_engine/audio_long16", "pcm"); - std::string file_audio_long16_wav = - webrtc::test::ResourcePath("voice_engine/audio_long16", "wav"); - std::string file_audio_long8 = - webrtc::test::ResourcePath("voice_engine/audio_long8", "pcm"); - std::string file_audio_long8_mulaw = - webrtc::test::ResourcePath("voice_engine/audio_long8mulaw", "wav"); - std::string file_audio_short16 = - webrtc::test::ResourcePath("voice_engine/audio_short16", "pcm"); - TEST_MUSTPASS(file->StartPlayingFileLocally(0, file_audio_long16.c_str())); - MARK(); - voe_base_->StartPlayout(0); - MARK(); // file should be mixed in and played out - SleepMs(dT); - TEST_MUSTPASS(!file->StartPlayingFileLocally(0, file_audio_long16.c_str())); - MARK(); // should fail (must stop first) - TEST_MUSTPASS(voe_base_->LastError() != VE_ALREADY_PLAYING); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileLocally(0, file_audio_long16.c_str())); - MARK(); // should work again (restarts file) - SleepMs(dT); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileLocally( - 0, file_audio_long16.c_str(), false, kFileFormatPcm16kHzFile)); - MARK(); - SleepMs(dT); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileLocally( - 0, file_audio_long8.c_str(), false, kFileFormatPcm8kHzFile)); - MARK(); - SleepMs(dT); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileLocally( - 0, file_audio_long16_wav.c_str(), false, kFileFormatPcm8kHzFile)); - MARK(); - SleepMs(dT); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileLocally( - 0, file_audio_long8_mulaw.c_str(), false, kFileFormatPcm8kHzFile)); - MARK(); - SleepMs(dT); - - // add compressed tests here... - - // TEST_MUSTPASS(file->StopPlayingFileLocally(0)); MARK(); - // TEST_MUSTPASS(file->StartPlayingFileLocally( - // 0, file_audio_short16.c_str(), true, - // kFileFormatPcm16kHzFile)); MARK(); // loop - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileLocally(0, - file_audio_short16.c_str(), - false, - kFileFormatPcm16kHzFile, - 1.0, - 0, - 2000)); - MARK(); // play segment - SleepMs(2500); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(!file->StartPlayingFileLocally(0, - file_audio_short16.c_str(), - false, - kFileFormatPcm16kHzFile, - 1.0, - 2000, - 1000)); - MARK(); // invalid segment - TEST_MUSTPASS(voe_base_->LastError() != VE_BAD_FILE); - TEST_MUSTPASS(!file->StartPlayingFileLocally(0, - file_audio_short16.c_str(), - false, - kFileFormatPcm16kHzFile, - 1.0, - 21000, - 30000)); - MARK(); // start > file size - TEST_MUSTPASS(voe_base_->LastError() != VE_BAD_FILE); - TEST_MUSTPASS(!file->StartPlayingFileLocally(0, - file_audio_short16.c_str(), - false, - kFileFormatPcm16kHzFile, - 1.0, - 100, - 100)); - MARK(); // invalid segment - TEST_MUSTPASS(voe_base_->LastError() != VE_BAD_FILE); - TEST_MUSTPASS(file->StartPlayingFileLocally(0, file_audio_long16.c_str())); - MARK(); // should work again (restarts file) - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - TEST_MUSTPASS(!file->StartPlayingFileLocally(0, (InStream*)NULL)); - MARK(); // just do it - TEST_MUSTPASS(voe_base_->LastError() != VE_BAD_FILE); - - AOK(); - ANL(); - - TEST(IsPlayingFileLocally); - ANL(); - - TEST_MUSTPASS(0 != file->IsPlayingFileLocally(0)); - MARK(); // inactive - TEST_MUSTPASS(file->StartPlayingFileLocally(0, file_audio_long16.c_str())); - MARK(); - TEST_MUSTPASS(1 != file->IsPlayingFileLocally(0)); - MARK(); // active - AOK(); - ANL(); - - TEST(ScaleLocalFilePlayout); - ANL(); - TEST_MUSTPASS(file->ScaleLocalFilePlayout(0, 1.0)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->ScaleLocalFilePlayout(0, 0.0)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->ScaleLocalFilePlayout(0, 0.5)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->ScaleLocalFilePlayout(0, 0.25)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - MARK(); - AOK(); - ANL(); - - // Replace microphone with file and play out on remote side - // All channels, per channel - // Different mixing frequencies - TEST(StartPlayingFileAsMicrophone); - ANL(); - TEST(IsPlayingFileAsMicrophone); - ANL(); - TEST(ScaleFileAsMicrophonePlayout); - ANL(); - CodecInst tempCodec; - for (int ch = -1; ch < 1; ++ch) // Channel -1 and 0 - { - TEST_LOG("Testing channel = %d \n", ch); - for (int fs = 1; fs < 4; ++fs) // nb, wb and swb codecs - { - switch (fs) { - case 1: // nb - TEST_LOG("Testing with nb codec \n"); - tempCodec.channels = 1; - tempCodec.pacsize = 160; - tempCodec.plfreq = 8000; - strcpy(tempCodec.plname, "PCMU"); - tempCodec.pltype = 0; - tempCodec.rate = 64000; - break; - case 2: // wb -#ifdef WEBRTC_CODEC_ISAC - TEST_LOG("Testing with wb codec \n"); - tempCodec.channels = 1; - tempCodec.pacsize = 480; - tempCodec.plfreq = 16000; - strcpy(tempCodec.plname, "ISAC"); - tempCodec.pltype = 103; - tempCodec.rate = 32000; - break; -#else - TEST_LOG( - "NOT testing with wb codec - " - "WEBRTC_CODEC_ISAC not defined \n"); - continue; -#endif - case 3: // swb -#ifdef WEBRTC_CODEC_PCM16 - TEST_LOG("Testing with swb codec \n"); - tempCodec.channels = 1; - tempCodec.pacsize = 640; - tempCodec.plfreq = 32000; - strcpy(tempCodec.plname, "L16"); - tempCodec.pltype = 125; - tempCodec.rate = 512000; - break; -#else - TEST_LOG( - "NOT testing with swb codec -" - " WEBRTC_CODEC_PCM16 not defined \n"); - continue; -#endif - } - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(codec->SetRecPayloadType(0, tempCodec)); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(codec->SetSendCodec(0, tempCodec)); - - TEST_LOG( - "File 1 in 16 kHz no mix, 2 in 16 kHz mix," - " 3 in 8 kHz no mix, 4 in 8 kHz mix \n"); - - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(ch, file_audio_long16.c_str())); - MARK(); // don't mix - SleepMs(2000); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(ch)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - ch, file_audio_long16_wav.c_str(), false, true, kFileFormatWavFile)); - MARK(); // mix - SleepMs(2000); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(ch)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - ch, file_audio_long8.c_str(), false, false, kFileFormatPcm8kHzFile)); - MARK(); // don't mix - SleepMs(2000); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(ch)); - MARK(); - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - ch, file_audio_long8.c_str(), false, true, kFileFormatPcm8kHzFile)); - MARK(); // mix - SleepMs(2000); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(ch)); - MARK(); - TEST_MUSTPASS(!file->StartPlayingFileAsMicrophone(ch, (InStream*)NULL)); - MARK(); // force error - AOK(); - ANL(); - - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(ch, file_audio_long16.c_str())); - TEST_MUSTPASS(1 != file->IsPlayingFileAsMicrophone(ch)); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(ch)); - TEST_MUSTPASS(0 != file->IsPlayingFileAsMicrophone(ch)); - AOK(); - ANL(); - - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(ch, file_audio_long16.c_str())); - TEST_MUSTPASS(file->ScaleFileAsMicrophonePlayout(ch, 1.0)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->ScaleFileAsMicrophonePlayout(ch, 0.5)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->ScaleFileAsMicrophonePlayout(ch, 0.25)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->ScaleFileAsMicrophonePlayout(ch, 0.0)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(ch)); - MARK(); - AOK(); - ANL(); - } - } - - // Record speaker signal to file - - CodecInst fcomp = {0, "L16", 8000, 80, 1, 128000}; - - TEST(StartRecordingPlayout); - ANL(); - TEST(StopRecordingPlayout); - ANL(); - - TEST_MUSTPASS( - file->StartRecordingPlayout(0, (output_path + "rec_play16.pcm").c_str())); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(0)); - MARK(); - - fcomp.plfreq = 8000; - strcpy(fcomp.plname, "L16"); - TEST_MUSTPASS(file->StartRecordingPlayout( - 0, (output_path + "rec_play8.wav").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(0)); - MARK(); - - fcomp.plfreq = 16000; - strcpy(fcomp.plname, "L16"); - TEST_MUSTPASS(file->StartRecordingPlayout( - 0, (output_path + "rec_play16.wav").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(0)); - MARK(); - - fcomp.pltype = 0; - fcomp.plfreq = 8000; - strcpy(fcomp.plname, "PCMU"); - fcomp.rate = 64000; - fcomp.pacsize = 160; - fcomp.channels = 1; - - TEST_MUSTPASS(file->StartRecordingPlayout( - 0, (output_path + "rec_play_pcmu.wav").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(0)); - MARK(); - - fcomp.pltype = 8; - fcomp.plfreq = 8000; - strcpy(fcomp.plname, "PCMA"); - TEST_MUSTPASS(file->StartRecordingPlayout( - 0, (output_path + "rec_play_pcma.wav").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(0)); - MARK(); - - fcomp.pltype = 97; - fcomp.pacsize = 240; - fcomp.rate = 13300; - fcomp.plfreq = 8000; - strcpy(fcomp.plname, "ILBC"); - TEST_MUSTPASS(file->StartRecordingPlayout( - 0, (output_path + "rec_play.ilbc").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(0)); - MARK(); - - TEST_MUSTPASS(file->StartRecordingPlayout( - -1, (output_path + "rec_play16_mixed.pcm").c_str())); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingPlayout(-1)); - MARK(); - - // TEST_MUSTPASS(file->StopPlayingFileLocally(0)); // Why should this work? - TEST_LOG("\nplaying out...\n"); - TEST_MUSTPASS( - file->StartPlayingFileLocally(0, - (output_path + "rec_play.ilbc").c_str(), - false, - kFileFormatCompressedFile)); - MARK(); - SleepMs(2000); - - AOK(); - ANL(); - - // Record microphone signal to file - TEST(StartRecordingMicrophone); - ANL(); - TEST(StopRecordingMicrophone); - ANL(); - - TEST_MUSTPASS( - file->StartRecordingMicrophone((output_path + "rec_mic16.pcm").c_str())); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - - voe_base_->StopSend(0); - TEST_MUSTPASS( - file->StartRecordingMicrophone((output_path + "rec_mic16.pcm").c_str())); - MARK(); // record without sending as well - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - voe_base_->StartSend(0); // restore sending - - fcomp.plfreq = 8000; - strcpy(fcomp.plname, "L16"); - TEST_MUSTPASS(file->StartRecordingMicrophone( - (output_path + "rec_play8.wav").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - - fcomp.plfreq = 16000; - strcpy(fcomp.plname, "L16"); - TEST_MUSTPASS(file->StartRecordingMicrophone( - (output_path + "rec_play16.wav").c_str(), &fcomp)); - SleepMs(1000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - - // FT#1810, the following test is to make sure StartRecordingCall will - // record both mic and file - TEST_LOG( - "StartRecordingCall, record both mic and file in specific" - " channels \n"); - TEST_LOG("Create maxnumofchannels \n"); - for (int i = 1; i < kTestMaxNumChannels; i++) { - int ch = voe_base_->CreateChannel(); - TEST_MUSTPASS(ch == -1); - TEST_MUSTPASS(voe_base_->StopPlayout(ch)); - } - scoped_ptr voice_channel_transport_1( - new VoiceChannelTransport(voe_network, 1)); - voice_channel_transport_1->SetSendDestination("127.0.0.1", 12356); - voice_channel_transport_1->SetLocalReceiver(12356); - TEST_MUSTPASS(voe_base_->StartReceive(1)); - TEST_MUSTPASS(voe_base_->StopPlayout(1)); - TEST_MUSTPASS(voe_base_->StartSend(1)); - TEST_MUSTPASS(voe_base_->StartPlayout(1)); - - TEST_LOG( - "ALways playing audio_long16.pcm for " - "channel 0 in background \n"); - fcomp.plfreq = 16000; - strcpy(fcomp.plname, "L16"); - TEST_LOG("Recording microphone to L16, please speak \n"); - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - 0, file_audio_long16.c_str(), true, true)); - TEST_MUSTPASS(file->StartRecordingMicrophone( - (output_path + "rec_play_ch.wav").c_str(), &fcomp)); - MARK(); - SleepMs(3000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); - TEST_LOG("Playing recording file, you should only hear what you said \n"); - TEST_MUSTPASS(file->StartPlayingFileLocally( - 0, (output_path + "rec_play_ch.wav").c_str(), false, kFileFormatWavFile)); - SleepMs(2500); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - TEST_LOG("Recording microphone 0 to L16, please speak \n"); - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - -1, file_audio_long16.c_str(), true, true)); - TEST_MUSTPASS(file->StartRecordingMicrophone( - (output_path + "rec_play_ch_0.wav").c_str(), &fcomp)); - MARK(); - SleepMs(3000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(-1)); - TEST_LOG( - "Playing recording file, you should hear what you said and" - " audio_long16.pcm \n"); - TEST_MUSTPASS( - file->StartPlayingFileLocally(0, - (output_path + "rec_play_ch_0.wav").c_str(), - false, - kFileFormatWavFile)); - SleepMs(2500); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - TEST_LOG("Recording microphone to ilbc, please speak \n"); - strcpy(fcomp.plname, "ilbc"); - fcomp.plfreq = 8000; - fcomp.pacsize = 160; - fcomp.rate = 15200; - fcomp.channels = 1; - fcomp.pltype = 97; - TEST_MUSTPASS(file->StartPlayingFileAsMicrophone( - 0, file_audio_long16.c_str(), true, true)); - TEST_MUSTPASS(file->StartRecordingMicrophone( - (output_path + "rec_play_ch_0.ilbc").c_str(), &fcomp)); - MARK(); - SleepMs(3000); - TEST_MUSTPASS(file->StopRecordingMicrophone()); - MARK(); - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); - TEST_LOG("Playing recording file, you should only hear what you said \n"); - TEST_MUSTPASS(file->StartPlayingFileLocally( - 0, - (output_path + "rec_play_ch_0.ilbc").c_str(), - false, - kFileFormatCompressedFile)); - SleepMs(2500); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - for (int i = 1; i < kTestMaxNumChannels; i++) { - TEST_MUSTPASS(voe_base_->DeleteChannel(i)); - } - - AOK(); - ANL(); - -// Record mixed (speaker + microphone) signal to file - -#if !defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID) - TEST(StartRecordingSpeakerStereo); - ANL(); - TEST(StopRecordingSpeakerStereo); - ANL(); - - VoEHardware* hardware = _mgr.HardwarePtr(); - TEST_MUSTPASS(NULL == hardware); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); -#if defined(_WIN32) - TEST_MUSTPASS(hardware->SetRecordingDevice(-1)); - TEST_MUSTPASS(hardware->SetPlayoutDevice(-1)); -#else - TEST_MUSTPASS(hardware->SetRecordingDevice(0)); - TEST_MUSTPASS(hardware->SetPlayoutDevice(0)); -#endif - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - MARK(); - - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); -#if defined(_WIN32) - TEST_MUSTPASS(hardware->SetRecordingDevice(-1)); - TEST_MUSTPASS(hardware->SetPlayoutDevice(-1)); -#else - TEST_MUSTPASS(hardware->SetRecordingDevice(0)); - TEST_MUSTPASS(hardware->SetPlayoutDevice(0)); -#endif - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - AOK(); - ANL(); -#else - TEST_LOG( - "Skipping stereo record tests -" - " WEBRTC_IOS or WEBRTC_ANDROID is defined \n"); -#endif // #if !defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID) - // Conversion between different file formats - -#if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID) - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); -#endif - - TEST(ConvertPCMToWAV); - ANL(); - - TEST_MUSTPASS( - file->ConvertPCMToWAV(file_audio_long16.c_str(), - (output_path + "singleUserDemoConv.wav").c_str())); - MARK(); - TEST_MUSTPASS(!file->ConvertPCMToWAV((InStream*)NULL, (OutStream*)NULL)); - MARK(); // invalid stream handles - AOK(); - ANL(); - - TEST(ConvertWAVToPCM); - ANL(); - - TEST_MUSTPASS( - file->ConvertWAVToPCM(file_audio_long16_wav.c_str(), - (output_path + "singleUserDemoConv.pcm").c_str())); - MARK(); - TEST_MUSTPASS(!file->ConvertWAVToPCM((InStream*)NULL, (OutStream*)NULL)); - MARK(); // invalid stream handles - AOK(); - ANL(); - - TEST(ConvertPCMToCompressed); - ANL(); - - fcomp.plfreq = 16000; - strcpy(fcomp.plname, "L16"); - TEST_MUSTPASS(!file->ConvertPCMToCompressed( - file_audio_long16.c_str(), - (output_path + "singleUserDemoConv16_dummy.wav").c_str(), - &fcomp)); - MARK(); // should not be supported - - fcomp.plfreq = 8000; - strcpy(fcomp.plname, "ilbc"); - fcomp.pacsize = 160; - fcomp.rate = 15200; - fcomp.pltype = 97; - fcomp.channels = 1; - TEST_MUSTPASS(file->ConvertPCMToCompressed( - file_audio_long16.c_str(), - (output_path + "singleUserDemoConv.ilbc").c_str(), - &fcomp)); - MARK(); - AOK(); - ANL(); - - TEST(ConvertCompressedToPCM); - ANL(); - - TEST_MUSTPASS(file->ConvertCompressedToPCM( - (output_path + "singleUserDemoConv.ilbc").c_str(), - (output_path + "singleUserDemoConv_ilbc.pcm").c_str())); - MARK(); - TEST_MUSTPASS(!file->ConvertCompressedToPCM( - file_audio_long16.c_str(), - (output_path + "singleUserDemoConv_dummy.pcm").c_str())); - MARK(); - AOK(); - ANL(); - -#if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID) - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); -#endif - - // Misc file functions - TEST(GetFileDuration); - ANL(); - - int dur; - - TEST_MUSTPASS(file->GetFileDuration(file_audio_long16.c_str(), dur)); - TEST_MUSTPASS(file->GetFileDuration( - file_audio_long8.c_str(), dur, kFileFormatPcm8kHzFile)); - TEST_MUSTPASS(file->GetFileDuration( - file_audio_long16.c_str(), dur, kFileFormatPcm16kHzFile)); - TEST_MUSTPASS(file->GetFileDuration( - file_audio_long16_wav.c_str(), dur, kFileFormatPcm8kHzFile)); - TEST_MUSTPASS( - file->GetFileDuration((output_path + "singleUserDemoConv.ilbc").c_str(), - dur, - kFileFormatCompressedFile)); - - AOK(); - ANL(); - - TEST(GetPlaybackPosition); - ANL(); - - int pos; - - TEST_MUSTPASS(file->StartPlayingFileLocally(0, file_audio_long16.c_str())); - SleepMs(1000); - TEST_MUSTPASS(file->GetPlaybackPosition(0, pos)); - MARK(); // position should be ~1000 - SleepMs(1000); - TEST_MUSTPASS(file->GetPlaybackPosition(0, pos)); - MARK(); // position should be ~2000 - // SleepMs(70*1000); - // file is no longer playing - // TEST_MUSTPASS(file->GetPlaybackPosition(0, pos)); MARK(); - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - AOK(); - ANL(); - - // These tests are related to defect 5136 - // They play .wav files with different sample freq for 5s - char localFiles[7][50] = {"audio_tiny8.wav", "audio_tiny11.wav", - "audio_tiny16.wav", "audio_tiny22.wav", - "audio_tiny32.wav", "audio_tiny44.wav", - "audio_tiny48.wav"}; - char freq[7][5] = {"8", "11", "16", "22", "32", "44.1", "48"}; - std::string resource_path = - webrtc::test::ProjectRootPath() + "resources/voice_engine/"; - TEST_MUSTPASS(voe_base_->StopReceive(0)); - for (int i = 0; i < 7; i++) { - TEST_LOG("Playing file %s, in %s KHz \n", localFiles[i], freq[i]); - TEST_MUSTPASS( - file->StartPlayingFileLocally(0, - (resource_path + localFiles[i]).c_str(), - false, - kFileFormatWavFile, - 1)); - SleepMs(4500); // The file should not end - TEST_MUSTPASS(file->StopPlayingFileLocally(0)); - } - - // TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); // Should not work - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - AOK(); - ANL(); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestHardware -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestHardware() { - PrepareTest("Hardware"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEHardware* hardware = _mgr.HardwarePtr(); - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - (output_path + "VoEHardware_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - // Set/GetAudioDeviceLayer - TEST(Set / GetAudioDeviceLayer); - ANL(); - AudioLayers wantedLayer = kAudioPlatformDefault; - AudioLayers givenLayer; - -#if defined(_WIN32) - wantedLayer = kAudioWindowsCore; - hardware->SetAudioDeviceLayer(wantedLayer); - TEST_LOG( - "If you run on XP or below, CoreAudio " - "should not be able to set.\n"); - TEST_LOG( - "If you run on Vista or above, CoreAudio " - "should be able to set.\n"); - TEST_LOG("Verify that this is the case.\n"); - - TEST_MUSTPASS(voe_base_->Init()); - - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - if (givenLayer == kAudioWindowsCore) { - TEST_LOG("CoreAudio was set\n"); - } else { - TEST_LOG("CoreAudio was *not* set\n"); - } - - TEST_MUSTPASS(voe_base_->Terminate()); - - wantedLayer = kAudioWindowsWave; - TEST_MUSTPASS(hardware->SetAudioDeviceLayer(wantedLayer)); - TEST_LOG("Wave audio should always be able to set.\n"); - - TEST_MUSTPASS(voe_base_->Init()); - - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - if (givenLayer == kAudioWindowsWave) { - TEST_LOG("Wave audio was set\n"); - } else { - TEST_LOG("Wave audio was not set\n"); - } - - TEST_MUSTPASS(voe_base_->Terminate()); -// end _WIN32 -#elif defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) - wantedLayer = kAudioLinuxPulse; - TEST_MUSTPASS(hardware->SetAudioDeviceLayer(wantedLayer)); - TEST_LOG( - "If you run on Linux with no/unsupported PA version, PulseAudio " - "7should not be able to set.\n"); - TEST_LOG( - "If you run on Linux with supported PA version running, PulseAudio" - " should be able to set.\n"); - TEST_LOG("Verify that this is the case.\n"); - - TEST_MUSTPASS(voe_base_->Init()); - - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - if (givenLayer == kAudioLinuxPulse) { - TEST_LOG("\nPulseAudio was set\n"); - } else { - TEST_LOG("\nPulseAudio was not set\n"); - } - - TEST_MUSTPASS(voe_base_->Terminate()); - - wantedLayer = kAudioLinuxAlsa; - TEST_MUSTPASS(hardware->SetAudioDeviceLayer(wantedLayer)); - TEST_LOG("ALSA audio should always be able to set.\n"); - - TEST_MUSTPASS(voe_base_->Init()); - - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - if (givenLayer == kAudioLinuxAlsa) { - TEST_LOG("\nALSA audio was set\n"); - } else { - TEST_LOG("\nALSA audio was not set\n"); - } - - TEST_MUSTPASS(voe_base_->Terminate()); -#endif // defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) - // Invalid arguments should be ignored. - wantedLayer = (AudioLayers)17; - TEST_MUSTPASS(hardware->SetAudioDeviceLayer(wantedLayer)); - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - ASSERT_TRUE(givenLayer == kAudioPlatformDefault); - MARK(); - - // Basic usage - wantedLayer = kAudioPlatformDefault; - TEST_MUSTPASS(hardware->SetAudioDeviceLayer(wantedLayer)); - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - TEST_MUSTPASS(givenLayer != wantedLayer); - MARK(); - - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - - wantedLayer = kAudioPlatformDefault; - TEST_MUSTPASS(-1 != hardware->SetAudioDeviceLayer(wantedLayer)); - TEST_MUSTPASS(VE_ALREADY_INITED != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(hardware->GetAudioDeviceLayer(givenLayer)); - MARK(); - switch (givenLayer) { - case kAudioPlatformDefault: - // already set above - break; - case kAudioWindowsCore: - TEST_LOG("\nRunning kAudioWindowsCore\n"); - break; - case kAudioWindowsWave: - TEST_LOG("\nRunning kAudioWindowsWave\n"); - break; - case kAudioLinuxAlsa: - TEST_LOG("\nRunning kAudioLinuxAlsa\n"); - break; - case kAudioLinuxPulse: - TEST_LOG("\nRunning kAudioLinuxPulse\n"); - break; - default: - TEST_LOG("\nERROR: Running unknown audio layer!!\n"); - return -1; - } - ANL(); - -#if !defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID) - // GetRecording/PlayoutDeviceStatus - TEST(Getrecording / PlayoutDeviceStatus); - ANL(); - bool isRecAvailable = false; - bool isPlayAvailable = false; - TEST_MUSTPASS(hardware->GetRecordingDeviceStatus(isRecAvailable)); - TEST_MUSTPASS(!isRecAvailable); - MARK(); - TEST_MUSTPASS(hardware->GetPlayoutDeviceStatus(isPlayAvailable)); - TEST_MUSTPASS(!isPlayAvailable); - MARK(); - - ANL(); - - int nRec = 0, nPlay = 0; - char devName[128]; - char guidName[128]; - int idx; - - TEST_MUSTPASS(hardware->GetNumOfPlayoutDevices(nPlay)); - - // GetPlayoutDeviceName - TEST(GetPlayoutDeviceName); - ANL(); - TEST_MUSTPASS(-1 != hardware->GetPlayoutDeviceName(nPlay, devName, guidName)); - TEST_MUSTPASS(VE_CANNOT_RETRIEVE_DEVICE_NAME != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(-1 != hardware->GetPlayoutDeviceName(-2, devName, guidName)); - TEST_MUSTPASS(VE_CANNOT_RETRIEVE_DEVICE_NAME != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(-1 != - hardware->GetPlayoutDeviceName(nPlay + 1, devName, guidName)); - TEST_MUSTPASS(VE_CANNOT_RETRIEVE_DEVICE_NAME != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(-1 != hardware->GetPlayoutDeviceName(0, NULL, guidName)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(hardware->GetPlayoutDeviceName(0, devName, NULL)); - - // default tests - for (idx = 0; idx < nPlay; idx++) { - TEST_MUSTPASS(hardware->GetPlayoutDeviceName(idx, devName, guidName)); - MARK(); - TEST_MUSTPASS(hardware->SetPlayoutDevice(idx)); - } - - ANL(); - - TEST_MUSTPASS(hardware->GetNumOfRecordingDevices(nRec)); - - // GetRecordingDeviceName - TEST(GetRecordingDeviceName); - ANL(); - TEST_MUSTPASS(-1 != - hardware->GetRecordingDeviceName(nRec, devName, guidName)); - TEST_MUSTPASS(VE_CANNOT_RETRIEVE_DEVICE_NAME != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(-1 != hardware->GetRecordingDeviceName(-2, devName, guidName)); - TEST_MUSTPASS(VE_CANNOT_RETRIEVE_DEVICE_NAME != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(-1 != - hardware->GetRecordingDeviceName(nRec + 1, devName, guidName)); - TEST_MUSTPASS(VE_CANNOT_RETRIEVE_DEVICE_NAME != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(-1 != hardware->GetRecordingDeviceName(0, NULL, guidName)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(hardware->GetRecordingDeviceName(0, devName, NULL)); - - // default tests - for (idx = 0; idx < nRec; idx++) { - TEST_MUSTPASS(hardware->GetRecordingDeviceName(idx, devName, guidName)); - MARK(); - TEST_MUSTPASS(hardware->SetRecordingDevice(idx)); - } - ANL(); - - // // SetRecordingDevice - TEST(SetRecordingDevice); - ANL(); - TEST_MUSTPASS(hardware->SetRecordingDevice(0)); - MARK(); - TEST_MUSTPASS(hardware->SetRecordingDevice(0, kStereoLeft)); - MARK(); - TEST_MUSTPASS(hardware->SetRecordingDevice(0, kStereoRight)); - MARK(); - ANL(); - - // SetPlayoutDevice - TEST(SetPlayoutDevice); - ANL(); -#if defined(_WIN32) - TEST_MUSTPASS(hardware->SetPlayoutDevice(-1)); - MARK(); -#else - TEST_MUSTPASS(hardware->SetPlayoutDevice(0)); - MARK(); -#endif - ANL(); -#endif // #if !defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID) -#if defined(WEBRTC_IOS) - TEST(ResetSoundDevice); - ANL(); - - for (int p = 0; p <= 60; p += 20) { - TEST_LOG("Resetting sound device several times with pause %d ms\n", p); - for (int l = 0; l < 50; ++l) { - TEST_MUSTPASS(hardware->ResetAudioDevice()); - MARK(); - SleepMs(p); - } - ANL(); - } - - TEST_LOG("Start streaming - verify the audio after each batch of resets \n"); - TEST_MUSTPASS(voe_base_->SetSendDestination(0, 8000, "127.0.0.1")); - TEST_MUSTPASS(voe_base_->SetLocalReceiver(0, 8000)); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - SleepMs(2000); - - SleepMs(2000); - for (int p = 0; p <= 60; p += 20) { - TEST_LOG("Resetting sound device several time with pause %d ms\n", p); - for (int l = 0; l < 20; ++l) { - TEST_MUSTPASS(hardware->ResetAudioDevice()); - MARK(); - SleepMs(p); - } - ANL(); - SleepMs(2000); - } - - TEST_LOG("Stop streaming \n"); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartReceive(0)); -#endif // defined(WEBRTC_IOS)) -#ifdef WEBRTC_IOS - TEST_LOG( - "\nNOTE: Always run hardware tests also without extended tests " - "enabled,\nsince the extended tests are pre-streaming tests only.\n"); -#endif - - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - ANL(); - AOK(); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestNetEqStats -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestNetEqStats() { - PrepareTest("NetEqStats (!EMPTY!)"); - - AOK(); - ANL(); - - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestNetwork -// -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestNetwork() { - PrepareTest("Network"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoENetwork* voe_network = _mgr.NetworkPtr(); - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - (output_path + "VoENetwork_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - TEST_MUSTPASS(voe_base_->Init()); - - // ------------------------------------------------------------------------ - // >> SetExternalTransport - // - // - VE initialized - // - no existing channels - // - no media - // - TEST(SetExternalTransport); - ANL(); - - ExtendedTestTransport* ptrTransport = new ExtendedTestTransport(voe_network); - - // call without valid channel - TEST_MUSTPASS(!voe_network->DeRegisterExternalTransport(0)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - - TEST_MUSTPASS(voe_base_->CreateChannel()); - - // different valid call combinations - TEST_MUSTPASS(voe_network->RegisterExternalTransport(0, *ptrTransport)); - MARK(); - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(0)); - MARK(); - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(0)); - MARK(); - TEST_MUSTPASS(voe_network->RegisterExternalTransport(0, *ptrTransport)); - MARK(); - TEST_MUSTPASS(!voe_network->RegisterExternalTransport(0, *ptrTransport)); - MARK(); // must deregister first - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(0)); - MARK(); - - // STATE: external transport is disabled - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->CreateChannel()); - - // enable external transport and verify that "emulated loopback" works - TEST_MUSTPASS(voe_network->RegisterExternalTransport(0, *ptrTransport)); - MARK(); - TEST_MUSTPASS(voe_base_->StartSend(0)); // should only start recording - TEST_MUSTPASS(!voe_network->RegisterExternalTransport(0, *ptrTransport)); - MARK(); // should fail - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(0)); - MARK(); - TEST_MUSTPASS(voe_network->RegisterExternalTransport(0, *ptrTransport)); - MARK(); - Play(0, 2000, true, true); // play file as mic and verify loopback audio - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(0)); - MARK(); - - // modified i VoE 3.4 (can be called also for external transport) - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - - // always disable external transport before deleting the Transport object; - // will lead to crash for RTCP transmission otherwise - TEST_MUSTPASS(voe_network->DeRegisterExternalTransport(0)); - MARK(); - delete ptrTransport; - - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - - ANL(); - AOK(); - ANL(); - ANL(); - - // >> end of SetExternalTransport - // ------------------------------------------------------------------------ - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestRTP_RTCP -// ---------------------------------------------------------------------------- - -// Used to validate packets during the RTP audio level indication test. -class RTPAudioTransport : public Transport { - public: - RTPAudioTransport() : mute_(false) {} - - virtual ~RTPAudioTransport() {} - - void set_mute(bool mute) { mute_ = mute; } - bool mute() const { return mute_; } - - // TODO(andrew): use proper error checks here rather than asserts. - virtual int SendPacket(int channel, const void* data, int length) { - const uint8_t* packet = static_cast(data); - - // Extension bit. - assert(packet[0] & 0x10); - int index = 12; // Assume standard RTP header. - // Header extension ID - assert(packet[index++] == 0xBE); - assert(packet[index++] == 0xDE); - // Header extension length - assert(packet[index++] == 0x00); - assert(packet[index++] == 0x01); - - // User-defined ID. - assert(((packet[index] & 0xf0) >> 4) == 1); - // Length - assert((packet[index++] & 0x0f) == 0); - - int vad = packet[index] >> 7; - int level = packet[index] & 0x7f; - if (channel == 0) { - printf("%d -%d\n", vad, level); - } else if (channel == 1) { - printf(" %d -%d\n", vad, level); - } else { - assert(false); - } - - if (mute_) { - assert(vad == 0); - assert(level == 127); - } else { - assert(vad == 0 || vad == 1); - assert(level >= 0 && level <= 127); - } - return 0; - } - - virtual int SendRTCPPacket(int /*channel*/, - const void* /*data*/, - int /*length*/) { - return 0; - } - - private: - bool mute_; -}; - -int VoEExtendedTest::TestRTP_RTCP() { - PrepareTest("RTP_RTCP"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEFile* file = _mgr.FilePtr(); - VoERTP_RTCP* rtp_rtcp = _mgr.RTP_RTCPPtr(); - VoENetwork* network = _mgr.NetworkPtr(); - VoEVolumeControl* volume = _mgr.VolumeControlPtr(); - VoECodec* codec = _mgr.CodecPtr(); - - XRTPObserver rtpObserver; - -#ifdef WEBRTC_ANDROID - int sleepTime = 200; -#else - int sleepTime = 100; -#endif - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - (output_path + "VoERTP_RTCP_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(network, 0)); - - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - - /////////////////////////// - // Actual test starts here - - // ------------------------------------------------------------------------ - // >> Set/GetRTPAudioLevelIndicationStatus - TEST(SetRTPAudioLevelIndicationStatus); - ANL(); - TEST(GetRTPAudioLevelIndicationStatus); - - // test invalid input parameters - TEST_MUSTPASS(-1 != rtp_rtcp->SetRTPAudioLevelIndicationStatus(0, true, 0)); - MARK(); - TEST_ERROR(VE_INVALID_ARGUMENT); - TEST_MUSTPASS(-1 != rtp_rtcp->SetRTPAudioLevelIndicationStatus(0, true, 15)); - MARK(); - TEST_ERROR(VE_INVALID_ARGUMENT); - TEST_MUSTPASS(-1 != rtp_rtcp->SetRTPAudioLevelIndicationStatus(1, true, 5)); - MARK(); - TEST_ERROR(VE_CHANNEL_NOT_VALID); - - // test any id can be used on disabling. - TEST_MUSTPASS(0 != rtp_rtcp->SetRTPAudioLevelIndicationStatus(0, false, 0)); - MARK(); - - // test complete valid input range [1,14] - bool audioLevelEnabled(false); - unsigned char ID(0); - for (int id = 1; id < 15; id++) { - TEST_MUSTPASS(rtp_rtcp->SetRTPAudioLevelIndicationStatus(0, true, id)); - MARK(); - TEST_MUSTPASS( - rtp_rtcp->GetRTPAudioLevelIndicationStatus(0, audioLevelEnabled, ID)); - MARK(); - TEST_MUSTPASS(audioLevelEnabled != true); - TEST_MUSTPASS(rtp_rtcp->SetRTPAudioLevelIndicationStatus(0, false, id)); - MARK(); - TEST_MUSTPASS( - rtp_rtcp->GetRTPAudioLevelIndicationStatus(0, audioLevelEnabled, ID)); - MARK(); - TEST_MUSTPASS(audioLevelEnabled != false); - TEST_MUSTPASS(ID != id); - } - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - - RTPAudioTransport rtpAudioTransport; - TEST_MUSTPASS(voe_base_->CreateChannel()); - TEST_MUSTPASS(network->RegisterExternalTransport(0, rtpAudioTransport)); - TEST_MUSTPASS(rtp_rtcp->SetRTPAudioLevelIndicationStatus(0, true)); - TEST_MUSTPASS(codec->SetVADStatus(0, true)); - - printf("\n\nReceving muted packets (expect VAD = 0, Level = -127)...\n"); - printf("VAD Level [dbFS]\n"); - SleepMs(2000); - rtpAudioTransport.set_mute(true); - TEST_MUSTPASS(volume->SetInputMute(0, true)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - SleepMs(5000); - TEST_MUSTPASS(voe_base_->StopSend(0)); - rtpAudioTransport.set_mute(false); - TEST_MUSTPASS(volume->SetInputMute(0, false)); - - printf("\nReceiving packets from mic (should respond to mic level)...\n"); - printf("VAD Level [dbFS]\n"); - SleepMs(2000); - TEST_MUSTPASS(voe_base_->StartSend(0)); - SleepMs(5000); - TEST_MUSTPASS(voe_base_->StopSend(0)); - - printf("\nReceiving packets from file (expect mostly VAD = 1)...\n"); - printf("VAD Level [dbFS]\n"); - SleepMs(2000); - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - SleepMs(5000); - TEST_MUSTPASS(voe_base_->StopSend(0)); - - printf("\nMuted and mic on independent channels...\n"); - printf("Muted Mic\n"); - SleepMs(2000); - ASSERT_TRUE(1 == voe_base_->CreateChannel()); - TEST_MUSTPASS(network->RegisterExternalTransport(1, rtpAudioTransport)); - TEST_MUSTPASS(rtp_rtcp->SetRTPAudioLevelIndicationStatus(1, true)); - TEST_MUSTPASS(codec->SetVADStatus(1, true)); - TEST_MUSTPASS(volume->SetInputMute(0, true)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartSend(1)); - SleepMs(5000); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopSend(1)); - - TEST_MUSTPASS(network->DeRegisterExternalTransport(0)); - TEST_MUSTPASS(network->DeRegisterExternalTransport(1)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(1)); - voice_channel_transport.reset(NULL); - - TEST_MUSTPASS(voe_base_->CreateChannel()); - voice_channel_transport.reset(new VoiceChannelTransport(network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12347); - voice_channel_transport->SetLocalReceiver(12347); - - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - - MARK(); - ANL(); - - // ------------------------------------------------------------------------ - // >> SetLocalSSRC - - int i(0); - - TEST(SetLocalSSRC); - TEST_MUSTPASS(!rtp_rtcp->SetLocalSSRC(0, 5678)); - MARK(); - TEST_MUSTPASS(VE_ALREADY_SENDING != voe_base_->LastError()); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(rtp_rtcp->SetLocalSSRC(0, 5678)); // force send SSRC to 5678 - TEST_MUSTPASS(voe_base_->StartSend(0)); - MARK(); - ANL(); - - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); - - // ------------------------------------------------------------------------ - // >> RTP dump APIs - TEST(Start / StopRtpDump); - ANL(); - TEST(Start / RTPDumpIsActive); - - TEST_MUSTPASS(-1 != rtp_rtcp->RTPDumpIsActive(-1, kRtpIncoming)); - MARK(); // invalid channel - TEST_ERROR(VE_CHANNEL_NOT_VALID); - TEST_MUSTPASS(false != rtp_rtcp->RTPDumpIsActive(0, kRtpIncoming)); - MARK(); // should be off by default - TEST_MUSTPASS(false != rtp_rtcp->RTPDumpIsActive(0, kRtpOutgoing)); - MARK(); // should be off by default - - TEST_MUSTPASS(-1 != rtp_rtcp->StartRTPDump(-1, NULL)); - MARK(); // invalid channel - TEST_ERROR(VE_CHANNEL_NOT_VALID); - TEST_MUSTPASS(-1 != rtp_rtcp->StartRTPDump(0, NULL)); - MARK(); // invalid file name - TEST_ERROR(VE_BAD_FILE); - - // Create two RTP dump files: - - // - dump_in_1sec.rtp <=> ~1 sec recording of input side - // - dump_in_2sec.rtp <=> ~2 sec recording of output side - // - TEST_MUSTPASS(rtp_rtcp->StopRTPDump(0)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->StopRTPDump(0, kRtpIncoming)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->StopRTPDump(0, kRtpOutgoing)); - MARK(); - std::string output_path = webrtc::test::OutputPath(); - TEST_MUSTPASS(rtp_rtcp->StartRTPDump( - 0, (output_path + "dump_in_1sec.rtp").c_str(), kRtpIncoming)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->StartRTPDump( - 0, (output_path + "dump_out_2sec.rtp").c_str(), kRtpOutgoing)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(rtp_rtcp->StopRTPDump(0, kRtpIncoming)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(rtp_rtcp->StopRTPDump(0, kRtpOutgoing)); - MARK(); - - // Start/Stop tests: - // - // - only one file (called dump_in_200ms.rtp) should exist after this test - // - for (i = 0; i < 10; i++) { - TEST_MUSTPASS( - rtp_rtcp->StartRTPDump(0, (output_path + "dump_in_200ms.rtp").c_str())); - MARK(); - SleepMs(200); - TEST_MUSTPASS(rtp_rtcp->StopRTPDump(0)); - MARK(); - } - - // >> end of RTP dump APIs - // ------------------------------------------------------------------------ - ANL(); - - TEST(GetRTCPStatus); - bool enabled; - TEST_MUSTPASS(!rtp_rtcp->GetRTCPStatus(-1, enabled)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatus(0, enabled)); - MARK(); // should be on by default - TEST_MUSTPASS(enabled != true); - ANL(); - - TEST(SetRTCPStatus); - TEST_MUSTPASS(rtp_rtcp->SetRTCPStatus(0, false)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatus(0, enabled)); - TEST_MUSTPASS(enabled != false); - MARK(); - SleepMs(2000); - TEST_MUSTPASS(rtp_rtcp->SetRTCPStatus(0, true)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatus(0, enabled)); - TEST_MUSTPASS(enabled != true); - MARK(); - SleepMs(6000); // Make sure we get an RTCP packet - ANL(); - - TEST(CNAME); - TEST_MUSTPASS(!rtp_rtcp->SetRTCP_CNAME(0, NULL)); - MARK(); - TEST_MUSTPASS(VE_RTP_RTCP_MODULE_ERROR != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(!rtp_rtcp->GetRemoteRTCP_CNAME(0, NULL)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - MARK(); - ANL(); - - TEST(GetRemoteSSRC); - unsigned int ssrc(0); - TEST_MUSTPASS(rtp_rtcp->GetRemoteSSRC(0, ssrc)); - MARK(); - TEST_MUSTPASS(ssrc != 5678); - ANL(); - - TEST(GetRemoteCSRC); // only trivial tests added - unsigned int csrcs[2]; - int n(0); - TEST_MUSTPASS(!rtp_rtcp->GetRemoteCSRCs(1, csrcs)); - MARK(); - n = rtp_rtcp->GetRemoteCSRCs(0, csrcs); - MARK(); - TEST_MUSTPASS(n != 0); // should be empty - ANL(); - - TEST(SetRTPObserver); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(rtp_rtcp->RegisterRTPObserver(0, rtpObserver)); - TEST_MUSTPASS(rtp_rtcp->DeRegisterRTPObserver(0)); - TEST_MUSTPASS(rtp_rtcp->RegisterRTPObserver(0, rtpObserver)); - TEST_MUSTPASS(rtp_rtcp->SetLocalSSRC(0, 7777)); // force send SSRC to 7777 - TEST_MUSTPASS(voe_base_->StartSend(0)); - SleepMs(sleepTime); - // verify that the new SSRC has been detected by the observer - TEST_MUSTPASS(rtpObserver._SSRC != 7777); - TEST_MUSTPASS(rtp_rtcp->DeRegisterRTPObserver(0)); - ANL(); - - // Make fresh restart (ensures that SSRC is randomized) - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - voice_channel_transport.reset(NULL); - - SleepMs(100); - - TEST_MUSTPASS(voe_base_->CreateChannel()); - - voice_channel_transport.reset(new VoiceChannelTransport(network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); - - SleepMs(8000); - - TEST(GetRemoteRTCPData); - // Statistics based on received RTCP reports (i.e. statistics on the remote - // side sent to us). - unsigned int NTPHigh(0), NTPLow(0), timestamp(0), playoutTimestamp(0), - jitter(0); - unsigned short fractionLost(0); - TEST_MUSTPASS(rtp_rtcp->GetRemoteRTCPData( - 0, NTPHigh, NTPLow, timestamp, playoutTimestamp)); - TEST_LOG( - "\n NTPHigh = %u \n NTPLow = %u \n timestamp = %u \n " - " playoutTimestamp = %u \n jitter = %u \n fractionLost = %hu \n", - NTPHigh, - NTPLow, - timestamp, - playoutTimestamp, - jitter, - fractionLost); - - unsigned int NTPHigh2(0), NTPLow2(0), timestamp2(0); - unsigned int playoutTimestamp2(0), jitter2(0); - unsigned short fractionLost2(0); - - TEST_LOG( - "take a new sample and ensure that the playout timestamp is " - "maintained"); - SleepMs(100); - TEST_MUSTPASS(rtp_rtcp->GetRemoteRTCPData(0, - NTPHigh2, - NTPLow2, - timestamp2, - playoutTimestamp2, - &jitter2, - &fractionLost2)); - TEST_LOG( - "\n NTPHigh = %u \n NTPLow = %u \n timestamp = %u \n " - " playoutTimestamp = %u \n jitter = %u \n fractionLost = %hu \n", - NTPHigh2, - NTPLow2, - timestamp2, - playoutTimestamp2, - jitter2, - fractionLost2); - TEST_MUSTPASS(playoutTimestamp != playoutTimestamp2); - - TEST_LOG( - "wait for 8 seconds and ensure that the RTCP statistics is" - " updated..."); - SleepMs(8000); - TEST_MUSTPASS(rtp_rtcp->GetRemoteRTCPData(0, - NTPHigh2, - NTPLow2, - timestamp2, - playoutTimestamp2, - &jitter2, - &fractionLost2)); - TEST_LOG( - "\n NTPHigh = %u \n NTPLow = %u \n timestamp = %u \n " - " playoutTimestamp = %u \n jitter = %u \n fractionLost = %hu \n", - NTPHigh2, - NTPLow2, - timestamp2, - playoutTimestamp2, - jitter2, - fractionLost2); - TEST_MUSTPASS((NTPHigh == NTPHigh2) && (NTPLow == NTPLow2)); - TEST_MUSTPASS(timestamp == timestamp2); - TEST_MUSTPASS(playoutTimestamp == playoutTimestamp2); - CodecInst cinst; -#ifdef WEBRTC_CODEC_RED - TEST_LOG( - "Turn FEC and VAD on and wait for 4 seconds and ensure that " - "the jitter is still small..."); -#if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - cinst.pltype = 104; - strcpy(cinst.plname, "isac"); - cinst.plfreq = 32000; - cinst.pacsize = 960; - cinst.channels = 1; - cinst.rate = 45000; -#else - cinst.pltype = 119; - strcpy(cinst.plname, "isaclc"); - cinst.plfreq = 16000; - cinst.pacsize = 320; - cinst.channels = 1; - cinst.rate = 40000; -#endif - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(codec->SetRecPayloadType(0, cinst)); - TEST_MUSTPASS(codec->SetSendCodec(0, cinst)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(rtp_rtcp->SetFECStatus(0, true, 126)); - MARK(); - TEST_MUSTPASS(codec->SetVADStatus(0, true)); - SleepMs(4000); - TEST_MUSTPASS(rtp_rtcp->GetRemoteRTCPData(0, - NTPHigh2, - NTPLow2, - timestamp2, - playoutTimestamp2, - &jitter2, - &fractionLost2)); - TEST_LOG( - "\n NTPHigh = %u \n NTPLow = %u \n timestamp = %u \n " - " playoutTimestamp = %u \n jitter = %u \n fractionLost = %hu \n", - NTPHigh2, - NTPLow2, - timestamp2, - playoutTimestamp2, - jitter2, - fractionLost2); - TEST_MUSTPASS(jitter2 > 1000) - TEST_MUSTPASS(rtp_rtcp->SetFECStatus(0, false)); - MARK(); -#endif // #ifdef WEBRTC_CODEC_RED - - TEST(GetRTPStatistics); - ANL(); - // Statistics summarized on local side based on received RTP packets. - CallStatistics stats; - // Call GetRTPStatistics over a longer period than 7.5 seconds - // (=dT RTCP transmissions). - unsigned int averageJitterMs, maxJitterMs, discardedPackets; - SleepMs(1000); - for (i = 0; i < 8; i++) { - TEST_MUSTPASS(rtp_rtcp->GetRTPStatistics( - 0, averageJitterMs, maxJitterMs, discardedPackets)); - TEST_LOG( - " %i) averageJitterMs = %u \n maxJitterMs = %u \n " - " discardedPackets = %u \n", - i, - averageJitterMs, - maxJitterMs, - discardedPackets); - SleepMs(1000); - } - - TEST(RTCPStatistics #1); - ANL(); - unsigned int packetsSent(0); - unsigned int packetsReceived(0); - for (i = 0; i < 8; i++) { - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatistics(0, stats)); - TEST_LOG( - " %i) fractionLost = %hu \n cumulativeLost = %u \n " - " extendedMax = %u \n jitterSamples = %u \n rttMs = %d \n", - i, - stats.fractionLost, - stats.cumulativeLost, - stats.extendedMax, - stats.jitterSamples, - stats.rttMs); - TEST_LOG( - " bytesSent = %d \n packetsSent = %d \n " - " bytesReceived = %d \n packetsReceived = %d \n", - stats.bytesSent, - stats.packetsSent, - stats.bytesReceived, - stats.packetsReceived); - if (i > 0) { - TEST_LOG(" diff sent packets : %u (~50)\n", - stats.packetsSent - packetsSent); - TEST_LOG(" diff received packets: %u (~50)\n", - stats.packetsReceived - packetsReceived); - } - packetsSent = stats.packetsSent; - packetsReceived = stats.packetsReceived; - SleepMs(1000); - } - - TEST(RTCPStatistics #2); - ANL(); - TEST_LOG("restart sending and ensure that the statistics is reset"); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - SleepMs(50); // ensures approx. two received packets - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatistics(0, stats)); - TEST_LOG( - "\n fractionLost = %hu \n cumulativeLost = %u \n " - " extendedMax = %u \n jitterSamples = %u \n rttMs = %d \n", - stats.fractionLost, - stats.cumulativeLost, - stats.extendedMax, - stats.jitterSamples, - stats.rttMs); - TEST_LOG( - " bytesSent = %d \n packetsSent = %d \n " - " bytesReceived = %d \n packetsReceived = %d \n", - stats.bytesSent, - stats.packetsSent, - stats.bytesReceived, - stats.packetsReceived); - - TEST(RTCPStatistics #3); - ANL(); - TEST_LOG("disable RTCP and verify that statistics is not corrupt"); - TEST_MUSTPASS(rtp_rtcp->SetRTCPStatus(0, false)); - SleepMs(250); - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatistics(0, stats)); - TEST_LOG( - "\n fractionLost = %hu \n cumulativeLost = %u \n " - " extendedMax = %u \n jitterSamples = %u \n rttMs = %d \n", - stats.fractionLost, - stats.cumulativeLost, - stats.extendedMax, - stats.jitterSamples, - stats.rttMs); - TEST_LOG( - " bytesSent = %d \n packetsSent = %d \n " - "bytesReceived = %d \n packetsReceived = %d \n", - stats.bytesSent, - stats.packetsSent, - stats.bytesReceived, - stats.packetsReceived); - TEST_MUSTPASS(rtp_rtcp->SetRTCPStatus(0, true)); - - TEST(RTCPStatistics #4); - ANL(); - TEST_LOG("restart receiving and check RX statistics"); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - SleepMs(50); // ensures approx. two received packets - TEST_MUSTPASS(rtp_rtcp->GetRTCPStatistics(0, stats)); - TEST_LOG( - "\n fractionLost = %hu \n cumulativeLost = %u \n " - " extendedMax = %u \n jitterSamples = %u \n rttMs = %d \n", - stats.fractionLost, - stats.cumulativeLost, - stats.extendedMax, - stats.jitterSamples, - stats.rttMs); - TEST_LOG( - " bytesSent = %d \n packetsSent = %d \n " - " bytesReceived = %d \n packetsReceived = %d \n", - stats.bytesSent, - stats.packetsSent, - stats.bytesReceived, - stats.packetsReceived); - - TEST(SendApplicationDefinedRTCPPacket); - // just do some fail tests here - TEST_MUSTPASS(voe_base_->StopSend(0)); - // should fail since sending is off - TEST_MUSTPASS(!rtp_rtcp->SendApplicationDefinedRTCPPacket( - 0, 0, 0, "abcdabcdabcdabcdabcdabcdabcdabcd", 32)); - MARK(); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_MUSTPASS(rtp_rtcp->SendApplicationDefinedRTCPPacket( - 0, 0, 0, "abcdabcdabcdabcdabcdabcdabcdabcd", 32)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->SetRTCPStatus(0, false)); - // should fail since RTCP is off - TEST_MUSTPASS(!rtp_rtcp->SendApplicationDefinedRTCPPacket( - 0, 0, 0, "abcdabcdabcdabcdabcdabcdabcdabcd", 32)); - MARK(); - TEST_MUSTPASS(rtp_rtcp->SetRTCPStatus(0, true)); - TEST_MUSTPASS(rtp_rtcp->SendApplicationDefinedRTCPPacket( - 0, 0, 0, "abcdabcdabcdabcdabcdabcdabcdabcd", 32)); - MARK(); - // invalid data length - TEST_MUSTPASS(!rtp_rtcp->SendApplicationDefinedRTCPPacket( - 0, 0, 0, "abcdabcdabcdabcdabcdabcdabcdabc", 31)); - MARK(); - // invalid data vector - TEST_MUSTPASS(!rtp_rtcp->SendApplicationDefinedRTCPPacket(0, 0, 0, NULL, 0)); - MARK(); - ANL(); - -#ifdef WEBRTC_CODEC_RED - TEST(SetFECStatus); - ANL(); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - cinst.pltype = 126; - strcpy(cinst.plname, "red"); - cinst.plfreq = 8000; - cinst.pacsize = 0; - cinst.channels = 1; - cinst.rate = 0; - TEST_MUSTPASS(codec->SetRecPayloadType(0, cinst)); -#if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - cinst.pltype = 104; - strcpy(cinst.plname, "isac"); - cinst.plfreq = 32000; - cinst.pacsize = 960; - cinst.channels = 1; - cinst.rate = 45000; -#else - cinst.pltype = 119; - strcpy(cinst.plname, "isaclc"); - cinst.plfreq = 16000; - cinst.pacsize = 320; - cinst.channels = 1; - cinst.rate = 40000; -#endif - // We have to re-register the audio codec payload type as stopReceive will - // clean the database - TEST_MUSTPASS(codec->SetRecPayloadType(0, cinst)); - voice_channel_transport.reset(NULL); - - voice_channel_transport.reset(new VoiceChannelTransport(network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 8000); - voice_channel_transport->SetLocalReceiver(8000); - - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - TEST_LOG("Start playing a file as microphone again \n"); - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); - TEST_MUSTPASS(rtp_rtcp->SetFECStatus(0, true, 126)); - MARK(); - TEST_LOG("Should sound OK with FEC enabled\n"); - SleepMs(4000); - TEST_MUSTPASS(rtp_rtcp->SetFECStatus(0, false)); - MARK(); -#endif // #ifdef WEBRTC_CODEC_RED - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - ANL(); - AOK(); - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestVideoSync -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestVideoSync() { - PrepareTest("VideoSync"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEVideoSync* vsync = _mgr.VideoSyncPtr(); - VoENetwork* network = _mgr.NetworkPtr(); - - // check if this interface is supported - if (!vsync) { - TEST_LOG("VoEVideoSync is not supported!"); - return -1; - } - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - (output_path + "VoEVideoSync_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); - - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(network, 0)); - - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - - /////////////////////////// - // Actual test starts here - - TEST(SetInitTimestamp); - ANL(); - TEST_MUSTPASS(!vsync->SetInitTimestamp(0, 12345)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(vsync->SetInitTimestamp(0, 12345)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - MARK(); - SleepMs(1000); - AOK(); - ANL(); - - TEST(SetInitSequenceNumber); - ANL(); - TEST_MUSTPASS(!vsync->SetInitSequenceNumber(0, 123)); - TEST_MUSTPASS(voe_base_->StopSend(0)); - MARK(); - SleepMs(1000); - TEST_MUSTPASS(vsync->SetInitSequenceNumber(0, 123)); - TEST_MUSTPASS(voe_base_->StartSend(0)); - MARK(); - SleepMs(1000); - AOK(); - ANL(); - - unsigned int timeStamp; - TEST(GetPlayoutTimestamp); - ANL(); - TEST_MUSTPASS(vsync->GetPlayoutTimestamp(0, timeStamp)); - TEST_LOG("GetPlayoutTimestamp: %u", timeStamp); - SleepMs(1000); - TEST_MUSTPASS(vsync->GetPlayoutTimestamp(0, timeStamp)); - TEST_LOG(" %u", timeStamp); - SleepMs(1000); - TEST_MUSTPASS(vsync->GetPlayoutTimestamp(0, timeStamp)); - TEST_LOG(" %u\n", timeStamp); - AOK(); - ANL(); - - TEST(SetMinimumPlayoutDelay); - ANL(); - TEST_MUSTPASS(!vsync->SetMinimumPlayoutDelay(0, -1)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - MARK(); - TEST_MUSTPASS(!vsync->SetMinimumPlayoutDelay(0, 5000)); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - MARK(); - - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - AOK(); - ANL(); - return 0; -} - -// ---------------------------------------------------------------------------- -// VoEExtendedTest::TestVolumeControl -// ---------------------------------------------------------------------------- - -int VoEExtendedTest::TestVolumeControl() { - PrepareTest("TestVolumeControl"); - - VoEBase* voe_base_ = _mgr.BasePtr(); - VoEVolumeControl* volume = _mgr.VolumeControlPtr(); - VoENetwork* network = _mgr.NetworkPtr(); -#ifdef _TEST_FILE_ - VoEFile* file = _mgr.FilePtr(); -#endif -#ifdef _TEST_HARDWARE_ - VoEHardware* hardware = _mgr.HardwarePtr(); -#endif - -#ifdef _USE_EXTENDED_TRACE_ - TEST_MUSTPASS(VoiceEngine::SetTraceFile( - (output_path + "VoEVolumeControl_trace.txt").c_str())); - TEST_MUSTPASS(VoiceEngine::SetTraceFilter( - kTraceStateInfo | kTraceStateInfo | kTraceWarning | kTraceError | - kTraceCritical | kTraceApiCall | kTraceMemory | kTraceInfo)); -#endif - - TEST_MUSTPASS(voe_base_->Init()); - TEST_MUSTPASS(voe_base_->CreateChannel()); -#if (defined _TEST_HARDWARE_ && (!defined(WEBRTC_IOS))) -#if defined(_WIN32) - TEST_MUSTPASS(hardware->SetRecordingDevice(-1)); - TEST_MUSTPASS(hardware->SetPlayoutDevice(-1)); -#else - TEST_MUSTPASS(hardware->SetRecordingDevice(0)); - TEST_MUSTPASS(hardware->SetPlayoutDevice(0)); -#endif -#endif - scoped_ptr voice_channel_transport( - new VoiceChannelTransport(network, 0)); - voice_channel_transport->SetSendDestination("127.0.0.1", 12345); - voice_channel_transport->SetLocalReceiver(12345); - TEST_MUSTPASS(voe_base_->StartReceive(0)); - TEST_MUSTPASS(voe_base_->StartPlayout(0)); - TEST_MUSTPASS(voe_base_->StartSend(0)); -#ifdef _TEST_FILE_ - TEST_MUSTPASS( - file->StartPlayingFileAsMicrophone(0, _mgr.AudioFilename(), true, true)); -#endif - -//////////////////////////// -// Actual test starts here - -#if !defined(WEBRTC_IOS) - TEST(SetSpeakerVolume); - ANL(); - TEST_MUSTPASS(-1 != volume->SetSpeakerVolume(256)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - ANL(); -#endif // #if !defined(WEBRTC_IOS) - -#if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - TEST(SetMicVolume); - ANL(); - TEST_MUSTPASS(-1 != volume->SetMicVolume(256)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - ANL(); -#endif // #if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - -#if !defined(WEBRTC_IOS) - TEST(SetChannelOutputVolumeScaling); - ANL(); - TEST_MUSTPASS(-1 != volume->SetChannelOutputVolumeScaling(0, (float)-0.1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetChannelOutputVolumeScaling(0, (float)10.1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - ANL(); -#endif // #if !defined(WEBRTC_IOS) -#if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) - TEST(SetOutputVolumePan); - ANL(); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(-1, (float)-0.1, (float)1.0)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(-1, (float)1.1, (float)1.0)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(-1, (float)1.0, (float)-0.1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(-1, (float)1.0, (float)1.1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - ANL(); - - TEST(SetChannelOutputVolumePan); - ANL(); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(0, (float)-0.1, (float)1.0)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(0, (float)1.1, (float)1.0)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(0, (float)1.0, (float)-0.1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - TEST_MUSTPASS(-1 != volume->SetOutputVolumePan(0, (float)1.0, (float)1.1)); - MARK(); - TEST_MUSTPASS(VE_INVALID_ARGUMENT != voe_base_->LastError()); - ANL(); -#endif // #if (!defined(WEBRTC_IOS) && !defined(WEBRTC_ANDROID)) -#ifdef _TEST_FILE_ - TEST_MUSTPASS(file->StopPlayingFileAsMicrophone(0)); -#endif - TEST_MUSTPASS(voe_base_->StopSend(0)); - TEST_MUSTPASS(voe_base_->StopPlayout(0)); - TEST_MUSTPASS(voe_base_->StopReceive(0)); - TEST_MUSTPASS(voe_base_->DeleteChannel(0)); - TEST_MUSTPASS(voe_base_->Terminate()); - - AOK(); - ANL(); - return 0; -} - -} // namespace voetest diff --git a/webrtc/voice_engine/test/auto_test/voe_extended_test.h b/webrtc/voice_engine/test/auto_test/voe_extended_test.h deleted file mode 100644 index 0c5d4e1882..0000000000 --- a/webrtc/voice_engine/test/auto_test/voe_extended_test.h +++ /dev/null @@ -1,473 +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. - */ - -#ifndef WEBRTC_VOICE_ENGINE_VOE_EXTENDED_TEST_H -#define WEBRTC_VOICE_ENGINE_VOE_EXTENDED_TEST_H - -#include "webrtc/modules/audio_device/include/audio_device.h" -#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" -#include "webrtc/system_wrappers/interface/event_wrapper.h" -#include "webrtc/system_wrappers/interface/ref_count.h" -#include "webrtc/system_wrappers/interface/scoped_ptr.h" -#include "webrtc/system_wrappers/interface/sleep.h" -#include "webrtc/system_wrappers/interface/thread_wrapper.h" -#include "webrtc/test/channel_transport/include/channel_transport.h" -#include "webrtc/voice_engine/test/auto_test/voe_standard_test.h" - -namespace voetest { - -class VoETestManager; - -// ---------------------------------------------------------------------------- -// AudioDeviceModule -// -// Implementation of the ADM to be used as external ADM in VoiceEngine. -// This implementation is only a mock class, i.e., it does not provide -// any real audio support. -// ---------------------------------------------------------------------------- - -class AudioDeviceModuleImpl : public AudioDeviceModule { - public: - // Factory methods - static AudioDeviceModuleImpl* Create(); - static bool Destroy(AudioDeviceModuleImpl* adm); - - // Helper methods which allows us to get some handy information about - // this mock implementation. - int32_t ReferenceCounter() const { - return _ref_count; - } - - // RefCountedModule implementation (mocks default implementation) - virtual int32_t AddRef(); - virtual int32_t Release(); - - // Module implementation - virtual int32_t Version(char* version, - uint32_t& remaining_buffer_in_bytes, - uint32_t& position) const { - return 0; - } - virtual int32_t ChangeUniqueId(int32_t id) { - return 0; - } - virtual int32_t TimeUntilNextProcess() { - return -1; - } - virtual int32_t Process() { - return 0; - } - - // AudioDeviceModule implementation - virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const { - return 0; - } - - virtual ErrorCode LastError() const { - return static_cast (0); - } - virtual int32_t RegisterEventObserver(AudioDeviceObserver* eventCallback) { - return 0; - } - - virtual int32_t RegisterAudioCallback(AudioTransport* audioCallback) { - return 0; - } - - virtual int32_t Init() { - return 0; - } - virtual int32_t Terminate() { - return 0; - } - virtual bool Initialized() const { - return true; - } - - virtual int16_t PlayoutDevices() { - return -1; - } - virtual int16_t RecordingDevices() { - return -1; - } - virtual int32_t PlayoutDeviceName(uint16_t index, - char name[kAdmMaxDeviceNameSize], - char guid[kAdmMaxGuidSize]) { - return -1; - } - virtual int32_t RecordingDeviceName(uint16_t index, - char name[kAdmMaxDeviceNameSize], - char guid[kAdmMaxGuidSize]) { - return -1; - } - - virtual int32_t SetPlayoutDevice(uint16_t index) { - return 0; - } - virtual int32_t SetPlayoutDevice(WindowsDeviceType device) { - return 0; - } - virtual int32_t SetRecordingDevice(uint16_t index) { - return 0; - } - virtual int32_t SetRecordingDevice(WindowsDeviceType device) { - return 0; - } - - virtual int32_t PlayoutIsAvailable(bool* available) { - *available = true; - return 0; - } - virtual int32_t InitPlayout() { - return 0; - } - virtual bool PlayoutIsInitialized() const { - return true; - } - virtual int32_t RecordingIsAvailable(bool* available) { - *available = true; - return 0; - } - virtual int32_t InitRecording() { - return 0; - } - virtual bool RecordingIsInitialized() const { - return true; - } - - virtual int32_t StartPlayout() { - return 0; - } - virtual int32_t StopPlayout() { - return 0; - } - virtual bool Playing() const { - return true; - } - virtual int32_t StartRecording() { - return 0; - } - virtual int32_t StopRecording() { - return 0; - } - virtual bool Recording() const { - return true; - } - - virtual int32_t SetAGC(bool enable) { - return -1; - } - virtual bool AGC() const { - return false; - } - - virtual int32_t SetWaveOutVolume(uint16_t volumeLeft, - uint16_t volumeRight) { - return -1; - } - virtual int32_t WaveOutVolume(uint16_t* volumeLeft, - uint16_t* volumeRight) const { - return -1; - } - - virtual int32_t SpeakerIsAvailable(bool* available) { - *available = true; - return 0; - } - virtual int32_t InitSpeaker() { - return 0; - } - virtual bool SpeakerIsInitialized() const { - return true; - } - virtual int32_t MicrophoneIsAvailable(bool* available) { - *available = true; - return 0; - } - virtual int32_t InitMicrophone() { - return 0; - } - virtual bool MicrophoneIsInitialized() const { - return true; - } - - virtual int32_t SpeakerVolumeIsAvailable(bool* available) { - return -1; - } - virtual int32_t SetSpeakerVolume(uint32_t volume) { - return -1; - } - virtual int32_t SpeakerVolume(uint32_t* volume) const { - return -1; - } - virtual int32_t MaxSpeakerVolume(uint32_t* maxVolume) const { - return -1; - } - virtual int32_t MinSpeakerVolume(uint32_t* minVolume) const { - return -1; - } - virtual int32_t SpeakerVolumeStepSize(uint16_t* stepSize) const { - return -1; - } - - virtual int32_t MicrophoneVolumeIsAvailable(bool* available) { - return -1; - } - virtual int32_t SetMicrophoneVolume(uint32_t volume) { - return -1; - } - virtual int32_t MicrophoneVolume(uint32_t* volume) const { - return -1; - } - virtual int32_t MaxMicrophoneVolume(uint32_t* maxVolume) const { - return -1; - } - virtual int32_t MinMicrophoneVolume(uint32_t* minVolume) const { - return -1; - } - virtual int32_t MicrophoneVolumeStepSize(uint16_t* stepSize) const { - return -1; - } - - virtual int32_t SpeakerMuteIsAvailable(bool* available) { - return -1; - } - virtual int32_t SetSpeakerMute(bool enable) { - return -1; - } - virtual int32_t SpeakerMute(bool* enabled) const { - return -1; - } - - virtual int32_t MicrophoneMuteIsAvailable(bool* available) { - return -1; - } - virtual int32_t SetMicrophoneMute(bool enable) { - return -1; - } - virtual int32_t MicrophoneMute(bool* enabled) const { - return -1; - } - - virtual int32_t MicrophoneBoostIsAvailable(bool* available) { - return -1; - } - virtual int32_t SetMicrophoneBoost(bool enable) { - return -1; - } - virtual int32_t MicrophoneBoost(bool* enabled) const { - return -1; - } - - virtual int32_t StereoPlayoutIsAvailable(bool* available) const { - return -1; - } - virtual int32_t SetStereoPlayout(bool enable) { - return -1; - } - virtual int32_t StereoPlayout(bool* enabled) const { - return -1; - } - virtual int32_t StereoRecordingIsAvailable(bool* available) const { - return -1; - } - virtual int32_t SetStereoRecording(bool enable) { - return -1; - } - virtual int32_t StereoRecording(bool* enabled) const { - return -1; - } - virtual int32_t SetRecordingChannel(ChannelType channel) { - return -1; - } - virtual int32_t RecordingChannel(ChannelType* channel) const { - return -1; - } - - virtual int32_t SetPlayoutBuffer(BufferType type, uint16_t sizeMS = 0) { - return -1; - } - virtual int32_t PlayoutBuffer(BufferType* type, uint16_t* sizeMS) const { - return -1; - } - virtual int32_t PlayoutDelay(uint16_t* delayMS) const { - return -1; - } - virtual int32_t RecordingDelay(uint16_t* delayMS) const { - return -1; - } - - virtual int32_t CPULoad(uint16_t* load) const { - return -1; - } - - virtual int32_t StartRawOutputFileRecording( - const char pcmFileNameUTF8[kAdmMaxFileNameSize]) { - return -1; - } - virtual int32_t StopRawOutputFileRecording() { - return -1; - } - virtual int32_t StartRawInputFileRecording( - const char pcmFileNameUTF8[kAdmMaxFileNameSize]) { - return -1; - } - virtual int32_t StopRawInputFileRecording() { - return -1; - } - - virtual int32_t SetRecordingSampleRate(uint32_t samplesPerSec) { - return -1; - } - virtual int32_t RecordingSampleRate(uint32_t* samplesPerSec) const { - return -1; - } - virtual int32_t SetPlayoutSampleRate(uint32_t samplesPerSec) { - return -1; - } - virtual int32_t PlayoutSampleRate(uint32_t* samplesPerSec) const { - return -1; - } - - virtual int32_t ResetAudioDevice() { - return -1; - } - virtual int32_t SetLoudspeakerStatus(bool enable) { - return -1; - } - virtual int32_t GetLoudspeakerStatus(bool* enabled) const { - return -1; - } - - protected: - AudioDeviceModuleImpl(); - ~AudioDeviceModuleImpl(); - - private: - volatile int32_t _ref_count; -}; - -// ---------------------------------------------------------------------------- -// Transport -// ---------------------------------------------------------------------------- - -class ExtendedTestTransport : public Transport { - public: - ExtendedTestTransport(VoENetwork* ptr); - ~ExtendedTestTransport(); - VoENetwork* myNetw; - - protected: - virtual int SendPacket(int channel, const void *data, int len); - virtual int SendRTCPPacket(int channel, const void *data, int len); - - private: - static bool Run(void* ptr); - bool Process(); - - private: - ThreadWrapper* _thread; - CriticalSectionWrapper* _lock; - EventWrapper* _event; - - private: - unsigned char _packetBuffer[1612]; - int _length; - int _channel; -}; - -class XTransport : public Transport { - public: - XTransport(VoENetwork* netw, VoEFile* file); - VoENetwork* _netw; - VoEFile* _file; - - public: - virtual int SendPacket(int channel, const void *data, int len); - virtual int SendRTCPPacket(int channel, const void *data, int len); -}; - -class XRTPObserver : public VoERTPObserver { - public: - XRTPObserver(); - ~XRTPObserver(); - virtual void OnIncomingCSRCChanged(int channel, - unsigned int CSRC, - bool added); - virtual void OnIncomingSSRCChanged(int channel, - unsigned int SSRC); - public: - unsigned int _SSRC; -}; - -// ---------------------------------------------------------------------------- -// VoEExtendedTest -// ---------------------------------------------------------------------------- - -class VoEExtendedTest : public VoiceEngineObserver, - public VoEConnectionObserver { - public: - VoEExtendedTest(VoETestManager& mgr); - ~VoEExtendedTest(); - int PrepareTest(const char* str) const; - int TestPassed(const char* str) const; - int TestBase(); - int TestCallReport(); - int TestCodec(); - int TestDtmf(); - int TestEncryption(); - int TestExternalMedia(); - int TestFile(); - int TestMixing(); - int TestHardware(); - int TestNetEqStats(); - int TestNetwork(); - int TestRTP_RTCP(); - int TestVideoSync(); - int TestVolumeControl(); - - int ErrorCode() const { - return _errCode; - } - void ClearErrorCode() { - _errCode = 0; - } - - protected: - // from VoiceEngineObserver - void CallbackOnError(int errCode, int channel); - void CallbackOnTrace(TraceLevel level, const char* message, - int length); - - // from VoEConnectionObserver - void OnPeriodicDeadOrAlive(int channel, bool alive); - - private: - void Play(int channel, unsigned int timeMillisec, - bool addFileAsMicrophone = false, bool addTimeMarker = false); - void Sleep(unsigned int timeMillisec, bool addMarker = false); - void StartMedia(int channel, int rtpPort, bool listen, bool playout, - bool send); - void StopMedia(int channel); - int RunMixingTest(int num_remote_channels, int num_local_channels, - int16_t input_value, int16_t max_output_value, - int16_t min_output_value); - - VoETestManager& _mgr; - int _errCode; - bool _alive; - bool _listening[32]; - scoped_ptr voice_channel_transports_[32]; - bool _playing[32]; - bool _sending[32]; -}; - -} // namespace voetest -#endif // WEBRTC_VOICE_ENGINE_VOE_EXTENDED_TEST_H diff --git a/webrtc/voice_engine/test/auto_test/voe_standard_test.cc b/webrtc/voice_engine/test/auto_test/voe_standard_test.cc index 05eb4d6820..9d5c936839 100644 --- a/webrtc/voice_engine/test/auto_test/voe_standard_test.cc +++ b/webrtc/voice_engine/test/auto_test/voe_standard_test.cc @@ -19,7 +19,6 @@ #include "webrtc/voice_engine/include/voe_neteq_stats.h" #include "webrtc/voice_engine/test/auto_test/automated_mode.h" #include "webrtc/voice_engine/test/auto_test/voe_cpu_test.h" -#include "webrtc/voice_engine/test/auto_test/voe_extended_test.h" #include "webrtc/voice_engine/test/auto_test/voe_stress_test.h" #include "webrtc/voice_engine/test/auto_test/voe_test_defines.h" #include "webrtc/voice_engine/test/auto_test/voe_unit_test.h" @@ -103,151 +102,6 @@ void SubAPIManager::DisplayStatus() const { ANL(); } -bool SubAPIManager::GetExtendedMenuSelection(ExtendedSelection& sel) { - printf("------------------------------------------------\n"); - printf("Select extended test\n\n"); - printf(" (0) None\n"); - printf("- - - - - - - - - - - - - - - - - - - - - - - - \n"); - printf(" (1) Base"); - if (_base) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (2) CallReport"); - if (_callReport) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (3) Codec"); - if (_codec) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (4) Dtmf"); - if (_dtmf) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (5) Encryption"); - if (_encryption) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (6) VoEExternalMedia"); - if (_externalMedia) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (7) File"); - if (_file) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (8) Hardware"); - if (_hardware) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (9) NetEqStats"); - if (_netEqStats) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (10) Network"); - if (_network) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (11) RTP_RTCP"); - if (_rtp_rtcp) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (12) VideoSync"); - if (_videoSync) - printf("\n"); - else - printf(" (NA)\n"); - printf(" (13) VolumeControl"); - if (_volumeControl) - printf("\n"); - else - printf(" (NA)\n"); - printf("\n: "); - - ExtendedSelection xsel(XSEL_Invalid); - int selection(0); - dummy = scanf("%d", &selection); - - switch (selection) { - case 0: - xsel = XSEL_None; - break; - case 1: - if (_base) - xsel = XSEL_Base; - break; - case 2: - if (_callReport) - xsel = XSEL_CallReport; - break; - case 3: - if (_codec) - xsel = XSEL_Codec; - break; - case 4: - if (_dtmf) - xsel = XSEL_DTMF; - break; - case 5: - if (_encryption) - xsel = XSEL_Encryption; - break; - case 6: - if (_externalMedia) - xsel = XSEL_ExternalMedia; - break; - case 7: - if (_file) - xsel = XSEL_File; - break; - case 8: - if (_hardware) - xsel = XSEL_Hardware; - break; - case 9: - if (_netEqStats) - xsel = XSEL_NetEqStats; - break; - case 10: - if (_network) - xsel = XSEL_Network; - break; - case 11: - if (_rtp_rtcp) - xsel = XSEL_RTP_RTCP; - break; - case 12: - if (_videoSync) - xsel = XSEL_VideoSync; - break; - case 13: - if (_volumeControl) - xsel = XSEL_VolumeControl; - break; - default: - xsel = XSEL_Invalid; - break; - } - if (xsel == XSEL_Invalid) - printf("Invalid selection!\n"); - - sel = xsel; - _xsel = xsel; - - return (xsel != XSEL_Invalid); -} - VoETestManager::VoETestManager() : initialized_(false), voice_engine_(NULL), @@ -416,8 +270,7 @@ int VoETestManager::ReleaseInterfaces() { return (releaseOK == true) ? 0 : -1; } -int run_auto_test(TestType test_type, - ExtendedSelection ext_selection) { +int run_auto_test(TestType test_type) { assert(test_type != Standard); SubAPIManager api_manager; @@ -432,80 +285,8 @@ int run_auto_test(TestType test_type, } test_manager.GetInterfaces(); - int result(-1); - if (test_type == Extended) { - VoEExtendedTest xtend(test_manager); - - result = 0; - while (ext_selection != XSEL_None) { - if (ext_selection == XSEL_Base || ext_selection == XSEL_All) { - if ((result = xtend.TestBase()) == -1) - break; - xtend.TestPassed("Base"); - } - if (ext_selection == XSEL_CallReport || ext_selection == XSEL_All) { - if ((result = xtend.TestCallReport()) == -1) - break; - xtend.TestPassed("CallReport"); - } - if (ext_selection == XSEL_Codec || ext_selection == XSEL_All) { - if ((result = xtend.TestCodec()) == -1) - break; - xtend.TestPassed("Codec"); - } - if (ext_selection == XSEL_DTMF || ext_selection == XSEL_All) { - if ((result = xtend.TestDtmf()) == -1) - break; - xtend.TestPassed("Dtmf"); - } - if (ext_selection == XSEL_Encryption || ext_selection == XSEL_All) { - if ((result = xtend.TestEncryption()) == -1) - break; - xtend.TestPassed("Encryption"); - } - if (ext_selection == XSEL_ExternalMedia || ext_selection == XSEL_All) { - if ((result = xtend.TestExternalMedia()) == -1) - break; - xtend.TestPassed("ExternalMedia"); - } - if (ext_selection == XSEL_File || ext_selection == XSEL_All) { - if ((result = xtend.TestFile()) == -1) - break; - xtend.TestPassed("File"); - } - if (ext_selection == XSEL_Hardware || ext_selection == XSEL_All) { - if ((result = xtend.TestHardware()) == -1) - break; - xtend.TestPassed("Hardware"); - } - if (ext_selection == XSEL_NetEqStats || ext_selection == XSEL_All) { - if ((result = xtend.TestNetEqStats()) == -1) - break; - xtend.TestPassed("NetEqStats"); - } - if (ext_selection == XSEL_Network || ext_selection == XSEL_All) { - if ((result = xtend.TestNetwork()) == -1) - break; - xtend.TestPassed("Network"); - } - if (ext_selection == XSEL_RTP_RTCP || ext_selection == XSEL_All) { - if ((result = xtend.TestRTP_RTCP()) == -1) - break; - xtend.TestPassed("RTP_RTCP"); - } - if (ext_selection == XSEL_VideoSync || ext_selection == XSEL_All) { - if ((result = xtend.TestVideoSync()) == -1) - break; - xtend.TestPassed("VideoSync"); - } - if (ext_selection == XSEL_VolumeControl || ext_selection == XSEL_All) { - if ((result = xtend.TestVolumeControl()) == -1) - break; - xtend.TestPassed("VolumeControl"); - } - api_manager.GetExtendedMenuSelection(ext_selection); - } // while (extendedSel != XSEL_None) - } else if (test_type == Stress) { + int result = -1; + if (test_type == Stress) { VoEStressTest stressTest(test_manager); result = stressTest.DoTest(); } else if (test_type == Unit) { @@ -544,7 +325,7 @@ int RunInManualMode() { printf("Select type of test\n\n"); printf(" (0) Quit\n"); printf(" (1) Standard test\n"); - printf(" (2) Extended test(s)...\n"); + printf(" (2) [OBSOLETE: Extended test(s)...]\n"); printf(" (3) Stress test(s)...\n"); printf(" (4) Unit test(s)...\n"); printf(" (5) CPU & memory reference test [Windows]...\n"); @@ -553,9 +334,7 @@ int RunInManualMode() { int selection(0); dummy = scanf("%d", &selection); - ExtendedSelection ext_selection = XSEL_Invalid; TestType test_type = Invalid; - switch (selection) { case 0: return 0; @@ -563,9 +342,6 @@ int RunInManualMode() { test_type = Standard; break; case 2: - test_type = Extended; - while (!api_manager.GetExtendedMenuSelection(ext_selection)) - continue; break; case 3: test_type = Stress; @@ -589,7 +365,7 @@ int RunInManualMode() { } // Function that can be called from other entry functions. - return run_auto_test(test_type, ext_selection); + return run_auto_test(test_type); } // ---------------------------------------------------------------------------- diff --git a/webrtc/voice_engine/test/auto_test/voe_standard_test.h b/webrtc/voice_engine/test/auto_test/voe_standard_test.h index 1f68f6b983..19dbc0e6ee 100644 --- a/webrtc/voice_engine/test/auto_test/voe_standard_test.h +++ b/webrtc/voice_engine/test/auto_test/voe_standard_test.h @@ -80,8 +80,7 @@ class SubAPIManager { _rtp_rtcp(false), _videoSync(false), _volumeControl(false), - _apm(false), - _xsel(XSEL_Invalid) { + _apm(false) { #ifdef WEBRTC_VOICE_ENGINE_CALL_REPORT_API _callReport = true; #endif @@ -122,13 +121,11 @@ class SubAPIManager { } void DisplayStatus() const; - bool GetExtendedMenuSelection(ExtendedSelection& sel); private: bool _base, _callReport, _codec, _dtmf, _encryption; bool _externalMedia, _file, _hardware; bool _netEqStats, _network, _rtp_rtcp, _videoSync, _volumeControl, _apm; - ExtendedSelection _xsel; }; class VoETestManager { diff --git a/webrtc/voice_engine/test/auto_test/voe_test_interface.h b/webrtc/voice_engine/test/auto_test/voe_test_interface.h index d5693d974b..fe5c7ec23b 100644 --- a/webrtc/voice_engine/test/auto_test/voe_test_interface.h +++ b/webrtc/voice_engine/test/auto_test/voe_test_interface.h @@ -23,31 +23,16 @@ using namespace webrtc; // TestType enumerator enum TestType { - Invalid = -1, Standard = 0, Extended = 1, Stress = 2, Unit = 3, CPU = 4 -}; + Invalid = -1, + Standard = 0, -// ExtendedSelection enumerator -enum ExtendedSelection { - XSEL_Invalid = -1, - XSEL_None = 0, - XSEL_All, - XSEL_Base, - XSEL_CallReport, - XSEL_Codec, - XSEL_DTMF, - XSEL_Encryption, - XSEL_ExternalMedia, - XSEL_File, - XSEL_Hardware, - XSEL_NetEqStats, - XSEL_Network, - XSEL_RTP_RTCP, - XSEL_VideoSync, - XSEL_VolumeControl, + Stress = 2, + Unit = 3, + CPU = 4 }; // Main test function -int runAutoTest(TestType testType, ExtendedSelection extendedSel); +int runAutoTest(TestType testType); } // namespace voetest #endif // WEBRTC_VOICE_ENGINE_VOE_TEST_INTERFACE_H diff --git a/webrtc/voice_engine/voice_engine.gyp b/webrtc/voice_engine/voice_engine.gyp index 8a06e86952..09bb58b60d 100644 --- a/webrtc/voice_engine/voice_engine.gyp +++ b/webrtc/voice_engine/voice_engine.gyp @@ -197,8 +197,6 @@ 'test/auto_test/resource_manager.cc', 'test/auto_test/voe_cpu_test.cc', 'test/auto_test/voe_cpu_test.h', - 'test/auto_test/voe_extended_test.cc', - 'test/auto_test/voe_extended_test.h', 'test/auto_test/voe_standard_test.cc', 'test/auto_test/voe_standard_test.h', 'test/auto_test/voe_stress_test.cc',