376 lines
8.9 KiB
C++
376 lines
8.9 KiB
C++
/*
|
|
* Copyright (c) 2011 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_STANDARD_TEST_H
|
|
#define WEBRTC_VOICE_ENGINE_VOE_STANDARD_TEST_H
|
|
|
|
#include "voe_test_defines.h"
|
|
#include "voe_test_interface.h"
|
|
|
|
#include "voe_errors.h"
|
|
#include "voe_base.h"
|
|
#include "voe_file.h"
|
|
#include "voe_dtmf.h"
|
|
#include "voe_rtp_rtcp.h"
|
|
#include "voe_audio_processing.h"
|
|
#ifdef WEBRTC_VOICE_ENGINE_CALL_REPORT_API
|
|
#include "voe_call_report.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_CODEC_API
|
|
#include "voe_codec.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_ENCRYPTION_API
|
|
#include "voe_encryption.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
|
|
#include "voe_external_media.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
|
|
#include "voe_hardware.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_NETWORK_API
|
|
#include "voe_network.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
|
|
#include "voe_video_sync.h"
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
|
|
#include "voe_volume_control.h"
|
|
#endif
|
|
|
|
#ifdef _TEST_NETEQ_STATS_
|
|
namespace webrtc
|
|
{
|
|
class CriticalSectionWrapper;
|
|
class ThreadWrapper;
|
|
class VoENetEqStats;
|
|
}
|
|
#endif
|
|
|
|
#if defined(ANDROID)
|
|
extern char mobileLogMsg[640];
|
|
#endif
|
|
|
|
namespace voetest
|
|
{
|
|
|
|
void createSummary(VoiceEngine* ve);
|
|
void prepareDelivery();
|
|
|
|
class MyRTPObserver: public VoERTPObserver
|
|
{
|
|
public:
|
|
MyRTPObserver();
|
|
~MyRTPObserver();
|
|
virtual void OnIncomingCSRCChanged(const int channel,
|
|
const unsigned int CSRC,
|
|
const bool added);
|
|
virtual void OnIncomingSSRCChanged(const int channel,
|
|
const unsigned int SSRC);
|
|
void Reset();
|
|
public:
|
|
unsigned int _SSRC[2];
|
|
unsigned int _CSRC[2][2]; // stores 2 SSRCs for each channel
|
|
bool _added[2][2];
|
|
int _size[2];
|
|
};
|
|
|
|
class MyTraceCallback: public TraceCallback
|
|
{
|
|
public:
|
|
void Print(const TraceLevel level, const char *traceString,
|
|
const int length);
|
|
};
|
|
|
|
class MyDeadOrAlive: public VoEConnectionObserver
|
|
{
|
|
public:
|
|
void OnPeriodicDeadOrAlive(const int channel, const bool alive);
|
|
};
|
|
|
|
class ErrorObserver: public VoiceEngineObserver
|
|
{
|
|
public:
|
|
ErrorObserver();
|
|
void CallbackOnError(const int channel, const int errCode);
|
|
public:
|
|
int code;
|
|
};
|
|
|
|
class RtcpAppHandler: public VoERTCPObserver
|
|
{
|
|
public:
|
|
void OnApplicationDataReceived(const int channel,
|
|
const unsigned char subType,
|
|
const unsigned int name,
|
|
const unsigned char* data,
|
|
const unsigned short dataLengthInBytes);
|
|
void Reset();
|
|
~RtcpAppHandler()
|
|
{
|
|
};
|
|
unsigned short _lengthBytes;
|
|
unsigned char _data[256];
|
|
unsigned char _subType;
|
|
unsigned int _name;
|
|
};
|
|
|
|
class DtmfCallback: public VoETelephoneEventObserver
|
|
{
|
|
public:
|
|
int counter;
|
|
DtmfCallback()
|
|
{
|
|
counter = 0;
|
|
}
|
|
virtual void OnReceivedTelephoneEventInband(const int channel,
|
|
const unsigned char eventCode,
|
|
const bool endOfEvent)
|
|
{
|
|
char msg[128];
|
|
if (endOfEvent)
|
|
sprintf(msg, "(event=%d, [END])", eventCode);
|
|
else
|
|
sprintf(msg, "(event=%d, [START])", eventCode);
|
|
TEST_LOG("%s", msg);
|
|
if (!endOfEvent)
|
|
counter++; // cound start of event only
|
|
fflush(NULL);
|
|
}
|
|
|
|
virtual void OnReceivedTelephoneEventOutOfBand(
|
|
const int channel,
|
|
const unsigned char eventCode,
|
|
const bool endOfEvent)
|
|
{
|
|
char msg[128];
|
|
if (endOfEvent)
|
|
sprintf(msg, "(event=%d, [END])", eventCode);
|
|
else
|
|
sprintf(msg, "(event=%d, [START])", eventCode);
|
|
TEST_LOG("%s", msg);
|
|
if (!endOfEvent)
|
|
counter++; // cound start of event only
|
|
fflush(NULL);
|
|
}
|
|
};
|
|
|
|
class my_encryption: public Encryption
|
|
{
|
|
void encrypt(int channel_no, unsigned char * in_data,
|
|
unsigned char * out_data, int bytes_in, int * bytes_out);
|
|
void decrypt(int channel_no, unsigned char * in_data,
|
|
unsigned char * out_data, int bytes_in, int * bytes_out);
|
|
void encrypt_rtcp(int channel_no, unsigned char * in_data,
|
|
unsigned char * out_data, int bytes_in, int * bytes_out);
|
|
void decrypt_rtcp(int channel_no, unsigned char * in_data,
|
|
unsigned char * out_data, int bytes_in, int * bytes_out);
|
|
};
|
|
|
|
class RxCallback: public VoERxVadCallback
|
|
{
|
|
public:
|
|
RxCallback() :
|
|
_vadDecision(-1)
|
|
{
|
|
};
|
|
|
|
virtual void OnRxVad(int, int vadDecision)
|
|
{
|
|
char msg[128];
|
|
sprintf(msg, "RX VAD detected decision %d \n", vadDecision);
|
|
TEST_LOG("%s", msg);
|
|
_vadDecision = vadDecision;
|
|
}
|
|
|
|
int _vadDecision;
|
|
};
|
|
|
|
#ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
|
|
class MyMedia: public VoEMediaProcess
|
|
{
|
|
public:
|
|
virtual void Process(const int channel, const ProcessingTypes type,
|
|
WebRtc_Word16 audio_10ms[], const int length,
|
|
const int samplingFreqHz, const bool stereo);
|
|
private:
|
|
int f;
|
|
};
|
|
#endif
|
|
|
|
class SubAPIManager
|
|
{
|
|
public:
|
|
SubAPIManager() :
|
|
_base(true),
|
|
_callReport(false),
|
|
_codec(false),
|
|
_dtmf(false),
|
|
_encryption(false),
|
|
_externalMedia(false),
|
|
_file(false),
|
|
_hardware(false),
|
|
_netEqStats(false),
|
|
_network(false),
|
|
_rtp_rtcp(false),
|
|
_videoSync(false),
|
|
_volumeControl(false),
|
|
_apm(false),
|
|
_xsel(XSEL_Invalid)
|
|
{
|
|
#ifdef WEBRTC_VOICE_ENGINE_CALL_REPORT_API
|
|
_callReport = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_CODEC_API
|
|
_codec = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_DTMF_API
|
|
_dtmf = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_ENCRYPTION_API
|
|
_encryption = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
|
|
_externalMedia = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_FILE_API
|
|
_file = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
|
|
_hardware = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
|
|
_netEqStats = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_NETWORK_API
|
|
_network = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API
|
|
_rtp_rtcp = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
|
|
_videoSync = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
|
|
_volumeControl = true;
|
|
#endif
|
|
#ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API
|
|
_apm = true;
|
|
#endif
|
|
};
|
|
|
|
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
|
|
{
|
|
public:
|
|
VoETestManager();
|
|
~VoETestManager();
|
|
|
|
void GetInterfaces();
|
|
int ReleaseInterfaces();
|
|
int DoStandardTest();
|
|
|
|
VoiceEngine* VoiceEnginePtr() const
|
|
{
|
|
return ve;
|
|
};
|
|
VoEBase* BasePtr() const
|
|
{
|
|
return base;
|
|
};
|
|
VoECodec* CodecPtr() const
|
|
{
|
|
return codec;
|
|
};
|
|
VoEVolumeControl* VolumeControlPtr() const
|
|
{
|
|
return volume;
|
|
};
|
|
VoEDtmf* DtmfPtr() const
|
|
{
|
|
return dtmf;
|
|
};
|
|
VoERTP_RTCP* RTP_RTCPPtr() const
|
|
{
|
|
return rtp_rtcp;
|
|
};
|
|
VoEAudioProcessing* APMPtr() const
|
|
{
|
|
return apm;
|
|
};
|
|
VoENetwork* NetworkPtr() const
|
|
{
|
|
return netw;
|
|
};
|
|
VoEFile* FilePtr() const
|
|
{
|
|
return file;
|
|
};
|
|
VoEHardware* HardwarePtr() const
|
|
{
|
|
return hardware;
|
|
};
|
|
VoEVideoSync* VideoSyncPtr() const
|
|
{
|
|
return vsync;
|
|
};
|
|
VoEEncryption* EncryptionPtr() const
|
|
{
|
|
return encrypt;
|
|
};
|
|
VoEExternalMedia* ExternalMediaPtr() const
|
|
{
|
|
return xmedia;
|
|
};
|
|
VoECallReport* CallReportPtr() const
|
|
{
|
|
return report;
|
|
};
|
|
#ifdef _TEST_NETEQ_STATS_
|
|
VoENetEqStats* NetEqStatsPtr() const
|
|
{
|
|
return neteqst;
|
|
};
|
|
#endif
|
|
|
|
private:
|
|
VoiceEngine* ve;
|
|
VoEBase* base;
|
|
VoECodec* codec;
|
|
VoEVolumeControl* volume;
|
|
VoEDtmf* dtmf;
|
|
VoERTP_RTCP* rtp_rtcp;
|
|
VoEAudioProcessing* apm;
|
|
VoENetwork* netw;
|
|
VoEFile* file;
|
|
VoEHardware* hardware;
|
|
VoEVideoSync* vsync;
|
|
VoEEncryption* encrypt;
|
|
VoEExternalMedia* xmedia;
|
|
VoECallReport* report;
|
|
#ifdef _TEST_NETEQ_STATS_
|
|
VoENetEqStats* neteqst;
|
|
#endif
|
|
int instanceCount;
|
|
};
|
|
|
|
} // namespace voetest
|
|
|
|
#endif // WEBRTC_VOICE_ENGINE_VOE_STANDARD_TEST_H
|