webrtc/voice_engine/main/test/auto_test/voe_standard_test.h

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