Remove unused and not working voe_extended_test.
BUG=2913
R=henrikg@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/8439004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@5533 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/voice_engine/test/auto_test/voe_extended_test.cc b/voice_engine/test/auto_test/voe_extended_test.cc
deleted file mode 100644
index af37edb..0000000
--- a/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 <stdio.h>
-#include <string.h>
-#include <vector>
-
-#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 <conio.h>
-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
-#include <netdb.h>
-#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<ExtendedTestTransport*>(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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<int>(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<int>(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<int>(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<int>(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<int>(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<int>(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<int>(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<int>(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<int>(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<int>(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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<const uint8_t*>(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<VoiceChannelTransport> 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<VoiceChannelTransport> 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<VoiceChannelTransport> 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/voice_engine/test/auto_test/voe_extended_test.h b/voice_engine/test/auto_test/voe_extended_test.h
deleted file mode 100644
index 0c5d4e1..0000000
--- a/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<ErrorCode> (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<webrtc::test::VoiceChannelTransport> voice_channel_transports_[32];
- bool _playing[32];
- bool _sending[32];
-};
-
-} // namespace voetest
-#endif // WEBRTC_VOICE_ENGINE_VOE_EXTENDED_TEST_H
diff --git a/voice_engine/test/auto_test/voe_standard_test.cc b/voice_engine/test/auto_test/voe_standard_test.cc
index 05eb4d6..9d5c936 100644
--- a/voice_engine/test/auto_test/voe_standard_test.cc
+++ b/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 @@
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 @@
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 @@
}
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 @@
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 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 @@
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 @@
}
// 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/voice_engine/test/auto_test/voe_standard_test.h b/voice_engine/test/auto_test/voe_standard_test.h
index 1f68f6b..19dbc0e 100644
--- a/voice_engine/test/auto_test/voe_standard_test.h
+++ b/voice_engine/test/auto_test/voe_standard_test.h
@@ -80,8 +80,7 @@
_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 @@
}
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/voice_engine/test/auto_test/voe_test_interface.h b/voice_engine/test/auto_test/voe_test_interface.h
index d5693d9..fe5c7ec 100644
--- a/voice_engine/test/auto_test/voe_test_interface.h
+++ b/voice_engine/test/auto_test/voe_test_interface.h
@@ -23,31 +23,16 @@
// 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/voice_engine/voice_engine.gyp b/voice_engine/voice_engine.gyp
index 8a06e86..09bb58b 100644
--- a/voice_engine/voice_engine.gyp
+++ b/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',