596 lines
16 KiB
C
596 lines
16 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_COMMON_TYPES_H
|
||
|
#define WEBRTC_COMMON_TYPES_H
|
||
|
|
||
|
#include "typedefs.h"
|
||
|
|
||
|
#ifdef WEBRTC_EXPORT
|
||
|
#define WEBRTC_DLLEXPORT _declspec(dllexport)
|
||
|
#elif WEBRTC_DLL
|
||
|
#define WEBRTC_DLLEXPORT _declspec(dllimport)
|
||
|
#else
|
||
|
#define WEBRTC_DLLEXPORT
|
||
|
#endif
|
||
|
|
||
|
#ifndef NULL
|
||
|
#define NULL 0
|
||
|
#endif
|
||
|
|
||
|
namespace webrtc {
|
||
|
|
||
|
class InStream
|
||
|
{
|
||
|
public:
|
||
|
virtual int Read(void *buf,int len) = 0;
|
||
|
virtual int Rewind() {return -1;}
|
||
|
virtual ~InStream() {}
|
||
|
protected:
|
||
|
InStream() {}
|
||
|
};
|
||
|
|
||
|
class OutStream
|
||
|
{
|
||
|
public:
|
||
|
virtual bool Write(const void *buf,int len) = 0;
|
||
|
virtual int Rewind() {return -1;}
|
||
|
virtual ~OutStream() {}
|
||
|
protected:
|
||
|
OutStream() {}
|
||
|
};
|
||
|
|
||
|
enum TraceModule
|
||
|
{
|
||
|
// not a module, triggered from the engine code
|
||
|
kTraceVoice = 0x0001,
|
||
|
// not a module, triggered from the engine code
|
||
|
kTraceVideo = 0x0002,
|
||
|
// not a module, triggered from the utility code
|
||
|
kTraceUtility = 0x0003,
|
||
|
kTraceRtpRtcp = 0x0004,
|
||
|
kTraceTransport = 0x0005,
|
||
|
kTraceSrtp = 0x0006,
|
||
|
kTraceAudioCoding = 0x0007,
|
||
|
kTraceAudioMixerServer = 0x0008,
|
||
|
kTraceAudioMixerClient = 0x0009,
|
||
|
kTraceFile = 0x000a,
|
||
|
kTraceAudioProcessing = 0x000b,
|
||
|
kTraceVideoCoding = 0x0010,
|
||
|
kTraceVideoMixer = 0x0011,
|
||
|
kTraceAudioDevice = 0x0012,
|
||
|
kTraceVideoRenderer = 0x0014,
|
||
|
kTraceVideoCapture = 0x0015,
|
||
|
kTraceVideoPreocessing = 0x0016
|
||
|
};
|
||
|
|
||
|
enum TraceLevel
|
||
|
{
|
||
|
kTraceNone = 0x0000, // no trace
|
||
|
kTraceStateInfo = 0x0001,
|
||
|
kTraceWarning = 0x0002,
|
||
|
kTraceError = 0x0004,
|
||
|
kTraceCritical = 0x0008,
|
||
|
kTraceApiCall = 0x0010,
|
||
|
kTraceDefault = 0x00ff,
|
||
|
|
||
|
kTraceModuleCall = 0x0020,
|
||
|
kTraceMemory = 0x0100, // memory info
|
||
|
kTraceTimer = 0x0200, // timing info
|
||
|
kTraceStream = 0x0400, // "continuous" stream of data
|
||
|
|
||
|
// used for debug purposes
|
||
|
kTraceDebug = 0x0800, // debug
|
||
|
kTraceInfo = 0x1000, // debug info
|
||
|
|
||
|
kTraceAll = 0xffff
|
||
|
};
|
||
|
|
||
|
// External Trace API
|
||
|
class TraceCallback
|
||
|
{
|
||
|
public:
|
||
|
virtual void Print(const TraceLevel level,
|
||
|
const char *traceString,
|
||
|
const int length) = 0;
|
||
|
protected:
|
||
|
virtual ~TraceCallback() {}
|
||
|
TraceCallback() {}
|
||
|
};
|
||
|
|
||
|
|
||
|
enum FileFormats
|
||
|
{
|
||
|
kFileFormatWavFile = 1,
|
||
|
kFileFormatCompressedFile = 2,
|
||
|
kFileFormatAviFile = 3,
|
||
|
kFileFormatPreencodedFile = 4,
|
||
|
kFileFormatPcm16kHzFile = 7,
|
||
|
kFileFormatPcm8kHzFile = 8,
|
||
|
kFileFormatPcm32kHzFile = 9
|
||
|
};
|
||
|
|
||
|
|
||
|
enum ProcessingTypes
|
||
|
{
|
||
|
kPlaybackPerChannel = 0,
|
||
|
kPlaybackAllChannelsMixed,
|
||
|
kRecordingPerChannel,
|
||
|
kRecordingAllChannelsMixed
|
||
|
};
|
||
|
|
||
|
// Encryption enums
|
||
|
enum CipherTypes
|
||
|
{
|
||
|
kCipherNull = 0,
|
||
|
kCipherAes128CounterMode = 1
|
||
|
};
|
||
|
|
||
|
enum AuthenticationTypes
|
||
|
{
|
||
|
kAuthNull = 0,
|
||
|
kAuthHmacSha1 = 3
|
||
|
};
|
||
|
|
||
|
enum SecurityLevels
|
||
|
{
|
||
|
kNoProtection = 0,
|
||
|
kEncryption = 1,
|
||
|
kAuthentication = 2,
|
||
|
kEncryptionAndAuthentication = 3
|
||
|
};
|
||
|
|
||
|
class Encryption
|
||
|
{
|
||
|
public:
|
||
|
virtual void encrypt(
|
||
|
int channel_no,
|
||
|
unsigned char* in_data,
|
||
|
unsigned char* out_data,
|
||
|
int bytes_in,
|
||
|
int* bytes_out) = 0;
|
||
|
|
||
|
virtual void decrypt(
|
||
|
int channel_no,
|
||
|
unsigned char* in_data,
|
||
|
unsigned char* out_data,
|
||
|
int bytes_in,
|
||
|
int* bytes_out) = 0;
|
||
|
|
||
|
virtual void encrypt_rtcp(
|
||
|
int channel_no,
|
||
|
unsigned char* in_data,
|
||
|
unsigned char* out_data,
|
||
|
int bytes_in,
|
||
|
int* bytes_out) = 0;
|
||
|
|
||
|
virtual void decrypt_rtcp(
|
||
|
int channel_no,
|
||
|
unsigned char* in_data,
|
||
|
unsigned char* out_data,
|
||
|
int bytes_in,
|
||
|
int* bytes_out) = 0;
|
||
|
|
||
|
protected:
|
||
|
virtual ~Encryption() {}
|
||
|
Encryption() {}
|
||
|
};
|
||
|
|
||
|
// External transport callback interface
|
||
|
class Transport
|
||
|
{
|
||
|
public:
|
||
|
virtual int SendPacket(int channel, const void *data, int len) = 0;
|
||
|
virtual int SendRTCPPacket(int channel, const void *data, int len) = 0;
|
||
|
|
||
|
protected:
|
||
|
virtual ~Transport() {}
|
||
|
Transport() {}
|
||
|
};
|
||
|
|
||
|
// ==================================================================
|
||
|
// Voice specific types
|
||
|
// ==================================================================
|
||
|
|
||
|
// Each codec supported can be described by this structure.
|
||
|
struct CodecInst
|
||
|
{
|
||
|
int pltype;
|
||
|
char plname[32];
|
||
|
int plfreq;
|
||
|
int pacsize;
|
||
|
int channels;
|
||
|
int rate;
|
||
|
};
|
||
|
|
||
|
enum FrameType
|
||
|
{
|
||
|
kFrameEmpty = 0,
|
||
|
kAudioFrameSpeech = 1,
|
||
|
kAudioFrameCN = 2,
|
||
|
kVideoFrameKey = 3, // independent frame
|
||
|
kVideoFrameDelta = 4, // depends on the previus frame
|
||
|
kVideoFrameGolden = 5, // depends on a old known previus frame
|
||
|
kVideoFrameAltRef = 6
|
||
|
};
|
||
|
|
||
|
// RTP
|
||
|
enum {kRtpCsrcSize = 15}; // RFC 3550 page 13
|
||
|
|
||
|
enum RTPDirections
|
||
|
{
|
||
|
kRtpIncoming = 0,
|
||
|
kRtpOutgoing
|
||
|
};
|
||
|
|
||
|
enum PayloadFrequencies
|
||
|
{
|
||
|
kFreq8000Hz = 8000,
|
||
|
kFreq16000Hz = 16000,
|
||
|
kFreq32000Hz = 32000
|
||
|
};
|
||
|
|
||
|
enum VadModes // degree of bandwidth reduction
|
||
|
{
|
||
|
kVadConventional = 0, // lowest reduction
|
||
|
kVadAggressiveLow,
|
||
|
kVadAggressiveMid,
|
||
|
kVadAggressiveHigh // highest reduction
|
||
|
};
|
||
|
|
||
|
struct NetworkStatistics // NETEQ statistics
|
||
|
{
|
||
|
// current jitter buffer size in ms
|
||
|
WebRtc_UWord16 currentBufferSize;
|
||
|
// preferred (optimal) buffer size in ms
|
||
|
WebRtc_UWord16 preferredBufferSize;
|
||
|
// loss rate (network + late) in percent (in Q14)
|
||
|
WebRtc_UWord16 currentPacketLossRate;
|
||
|
// late loss rate in percent (in Q14)
|
||
|
WebRtc_UWord16 currentDiscardRate;
|
||
|
// fraction (of original stream) of synthesized speech inserted through
|
||
|
// expansion (in Q14)
|
||
|
WebRtc_UWord16 currentExpandRate;
|
||
|
// fraction of synthesized speech inserted through pre-emptive expansion
|
||
|
// (in Q14)
|
||
|
WebRtc_UWord16 currentPreemptiveRate;
|
||
|
// fraction of data removed through acceleration (in Q14)
|
||
|
WebRtc_UWord16 currentAccelerateRate;
|
||
|
};
|
||
|
|
||
|
struct JitterStatistics
|
||
|
{
|
||
|
// smallest Jitter Buffer size during call in ms
|
||
|
WebRtc_UWord32 jbMinSize;
|
||
|
// largest Jitter Buffer size during call in ms
|
||
|
WebRtc_UWord32 jbMaxSize;
|
||
|
// the average JB size, measured over time - ms
|
||
|
WebRtc_UWord32 jbAvgSize;
|
||
|
// number of times the Jitter Buffer changed (using Accelerate or
|
||
|
// Pre-emptive Expand)
|
||
|
WebRtc_UWord32 jbChangeCount;
|
||
|
// amount (in ms) of audio data received late
|
||
|
WebRtc_UWord32 lateLossMs;
|
||
|
// milliseconds removed to reduce jitter buffer size
|
||
|
WebRtc_UWord32 accelerateMs;
|
||
|
// milliseconds discarded through buffer flushing
|
||
|
WebRtc_UWord32 flushedMs;
|
||
|
// milliseconds of generated silence
|
||
|
WebRtc_UWord32 generatedSilentMs;
|
||
|
// milliseconds of synthetic audio data (non-background noise)
|
||
|
WebRtc_UWord32 interpolatedVoiceMs;
|
||
|
// milliseconds of synthetic audio data (background noise level)
|
||
|
WebRtc_UWord32 interpolatedSilentMs;
|
||
|
// count of tiny expansions in output audio
|
||
|
WebRtc_UWord32 countExpandMoreThan120ms;
|
||
|
// count of small expansions in output audio
|
||
|
WebRtc_UWord32 countExpandMoreThan250ms;
|
||
|
// count of medium expansions in output audio
|
||
|
WebRtc_UWord32 countExpandMoreThan500ms;
|
||
|
// count of long expansions in output audio
|
||
|
WebRtc_UWord32 countExpandMoreThan2000ms;
|
||
|
// duration of longest audio drop-out
|
||
|
WebRtc_UWord32 longestExpandDurationMs;
|
||
|
// count of times we got small network outage (inter-arrival time in
|
||
|
// [500, 1000) ms)
|
||
|
WebRtc_UWord32 countIAT500ms;
|
||
|
// count of times we got medium network outage (inter-arrival time in
|
||
|
// [1000, 2000) ms)
|
||
|
WebRtc_UWord32 countIAT1000ms;
|
||
|
// count of times we got large network outage (inter-arrival time >=
|
||
|
// 2000 ms)
|
||
|
WebRtc_UWord32 countIAT2000ms;
|
||
|
// longest packet inter-arrival time in ms
|
||
|
WebRtc_UWord32 longestIATms;
|
||
|
// min time incoming Packet "waited" to be played
|
||
|
WebRtc_UWord32 minPacketDelayMs;
|
||
|
// max time incoming Packet "waited" to be played
|
||
|
WebRtc_UWord32 maxPacketDelayMs;
|
||
|
// avg time incoming Packet "waited" to be played
|
||
|
WebRtc_UWord32 avgPacketDelayMs;
|
||
|
};
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
int min; // minumum
|
||
|
int max; // maximum
|
||
|
int average; // average
|
||
|
} StatVal;
|
||
|
|
||
|
typedef struct // All levels are reported in dBm0
|
||
|
{
|
||
|
StatVal speech_rx; // long-term speech levels on receiving side
|
||
|
StatVal speech_tx; // long-term speech levels on transmitting side
|
||
|
StatVal noise_rx; // long-term noise/silence levels on receiving side
|
||
|
StatVal noise_tx; // long-term noise/silence levels on transmitting side
|
||
|
} LevelStatistics;
|
||
|
|
||
|
typedef struct // All levels are reported in dB
|
||
|
{
|
||
|
StatVal erl; // Echo Return Loss
|
||
|
StatVal erle; // Echo Return Loss Enhancement
|
||
|
StatVal rerl; // RERL = ERL + ERLE
|
||
|
// Echo suppression inside EC at the point just before its NLP
|
||
|
StatVal a_nlp;
|
||
|
} EchoStatistics;
|
||
|
|
||
|
enum TelephoneEventDetectionMethods
|
||
|
{
|
||
|
kInBand = 0,
|
||
|
kOutOfBand = 1,
|
||
|
kInAndOutOfBand = 2
|
||
|
};
|
||
|
|
||
|
enum NsModes // type of Noise Suppression
|
||
|
{
|
||
|
kNsUnchanged = 0, // previously set mode
|
||
|
kNsDefault, // platform default
|
||
|
kNsConference, // conferencing default
|
||
|
kNsLowSuppression, // lowest suppression
|
||
|
kNsModerateSuppression,
|
||
|
kNsHighSuppression,
|
||
|
kNsVeryHighSuppression, // highest suppression
|
||
|
};
|
||
|
|
||
|
enum AgcModes // type of Automatic Gain Control
|
||
|
{
|
||
|
kAgcUnchanged = 0, // previously set mode
|
||
|
kAgcDefault, // platform default
|
||
|
// adaptive mode for use when analog volume control exists (e.g. for
|
||
|
// PC softphone)
|
||
|
kAgcAdaptiveAnalog,
|
||
|
// scaling takes place in the digital domain (e.g. for conference servers
|
||
|
// and embedded devices)
|
||
|
kAgcAdaptiveDigital,
|
||
|
// can be used on embedded devices where the the capture signal is level
|
||
|
// is predictable
|
||
|
kAgcFixedDigital
|
||
|
};
|
||
|
|
||
|
// EC modes
|
||
|
enum EcModes // type of Echo Control
|
||
|
{
|
||
|
kEcUnchanged = 0, // previously set mode
|
||
|
kEcDefault, // platform default
|
||
|
kEcConference, // conferencing default (aggressive AEC)
|
||
|
kEcAec, // Acoustic Echo Cancellation
|
||
|
kEcAecm, // AEC mobile
|
||
|
};
|
||
|
|
||
|
// AECM modes
|
||
|
enum AecmModes // mode of AECM
|
||
|
{
|
||
|
kAecmQuietEarpieceOrHeadset = 0,
|
||
|
// Quiet earpiece or headset use
|
||
|
kAecmEarpiece, // most earpiece use
|
||
|
kAecmLoudEarpiece, // Loud earpiece or quiet speakerphone use
|
||
|
kAecmSpeakerphone, // most speakerphone use (default)
|
||
|
kAecmLoudSpeakerphone // Loud speakerphone
|
||
|
};
|
||
|
|
||
|
// AGC configuration
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned short targetLeveldBOv;
|
||
|
unsigned short digitalCompressionGaindB;
|
||
|
bool limiterEnable;
|
||
|
} AgcConfig; // AGC configuration parameters
|
||
|
|
||
|
enum StereoChannel
|
||
|
{
|
||
|
kStereoLeft = 0,
|
||
|
kStereoRight,
|
||
|
kStereoBoth
|
||
|
};
|
||
|
|
||
|
// Audio device layers
|
||
|
enum AudioLayers
|
||
|
{
|
||
|
kAudioPlatformDefault = 0,
|
||
|
kAudioWindowsWave = 1,
|
||
|
kAudioWindowsCore = 2,
|
||
|
kAudioLinuxAlsa = 3,
|
||
|
kAudioLinuxPulse = 4
|
||
|
};
|
||
|
|
||
|
enum NetEqModes // NetEQ playout configurations
|
||
|
{
|
||
|
// Optimized trade-off between low delay and jitter robustness for two-way
|
||
|
// communication.
|
||
|
kNetEqDefault = 0,
|
||
|
// Improved jitter robustness at the cost of increased delay. Can be
|
||
|
// used in one-way communication.
|
||
|
kNetEqStreaming = 1,
|
||
|
// Optimzed for decodability of fax signals rather than for perceived audio
|
||
|
// quality.
|
||
|
kNetEqFax = 2,
|
||
|
};
|
||
|
|
||
|
enum NetEqBgnModes // NetEQ Background Noise (BGN) configurations
|
||
|
{
|
||
|
// BGN is always on and will be generated when the incoming RTP stream
|
||
|
// stops (default).
|
||
|
kBgnOn = 0,
|
||
|
// The BGN is faded to zero (complete silence) after a few seconds.
|
||
|
kBgnFade = 1,
|
||
|
// BGN is not used at all. Silence is produced after speech extrapolation
|
||
|
// has faded.
|
||
|
kBgnOff = 2,
|
||
|
};
|
||
|
|
||
|
enum OnHoldModes // On Hold direction
|
||
|
{
|
||
|
kHoldSendAndPlay = 0, // Put both sending and playing in on-hold state.
|
||
|
kHoldSendOnly, // Put only sending in on-hold state.
|
||
|
kHoldPlayOnly // Put only playing in on-hold state.
|
||
|
};
|
||
|
|
||
|
enum AmrMode
|
||
|
{
|
||
|
kRfc3267BwEfficient = 0,
|
||
|
kRfc3267OctetAligned = 1,
|
||
|
kRfc3267FileStorage = 2,
|
||
|
};
|
||
|
|
||
|
// ==================================================================
|
||
|
// Video specific types
|
||
|
// ==================================================================
|
||
|
|
||
|
// Raw video types
|
||
|
enum RawVideoType
|
||
|
{
|
||
|
kVideoI420 = 0,
|
||
|
kVideoYV12 = 1,
|
||
|
kVideoYUY2 = 2,
|
||
|
kVideoUYVY = 3,
|
||
|
kVideoIYUV = 4,
|
||
|
kVideoARGB = 5,
|
||
|
kVideoRGB24 = 6,
|
||
|
kVideoRGB565 = 7,
|
||
|
kVideoARGB4444 = 8,
|
||
|
kVideoARGB1555 = 9,
|
||
|
kVideoMJPEG = 10,
|
||
|
kVideoNV12 = 11,
|
||
|
kVideoNV21 = 12,
|
||
|
kVideoUnknown = 99
|
||
|
};
|
||
|
|
||
|
// Video codec
|
||
|
enum { kConfigParameterSize = 128};
|
||
|
enum { kPayloadNameSize = 32};
|
||
|
|
||
|
// H.263 specific
|
||
|
struct VideoCodecH263
|
||
|
{
|
||
|
char quality;
|
||
|
};
|
||
|
|
||
|
// H.264 specific
|
||
|
enum H264Packetization
|
||
|
{
|
||
|
kH264SingleMode = 0,
|
||
|
kH264NonInterleavedMode = 1
|
||
|
};
|
||
|
|
||
|
enum VideoCodecComplexity
|
||
|
{
|
||
|
kComplexityNormal = 0,
|
||
|
kComplexityHigh = 1,
|
||
|
kComplexityHigher = 2,
|
||
|
kComplexityMax = 3
|
||
|
};
|
||
|
|
||
|
enum VideoCodecProfile
|
||
|
{
|
||
|
kProfileBase = 0x00,
|
||
|
kProfileMain = 0x01
|
||
|
};
|
||
|
|
||
|
struct VideoCodecH264
|
||
|
{
|
||
|
H264Packetization packetization;
|
||
|
VideoCodecComplexity complexity;
|
||
|
VideoCodecProfile profile;
|
||
|
char level;
|
||
|
char quality;
|
||
|
|
||
|
bool useFMO;
|
||
|
|
||
|
unsigned char configParameters[kConfigParameterSize];
|
||
|
unsigned char configParametersSize;
|
||
|
};
|
||
|
|
||
|
// VP8 specific
|
||
|
struct VideoCodecVP8
|
||
|
{
|
||
|
bool pictureLossIndicationOn;
|
||
|
bool feedbackModeOn;
|
||
|
VideoCodecComplexity complexity;
|
||
|
};
|
||
|
|
||
|
// MPEG-4 specific
|
||
|
struct VideoCodecMPEG4
|
||
|
{
|
||
|
unsigned char configParameters[kConfigParameterSize];
|
||
|
unsigned char configParametersSize;
|
||
|
char level;
|
||
|
};
|
||
|
|
||
|
// Unknown specific
|
||
|
struct VideoCodecGeneric
|
||
|
{
|
||
|
};
|
||
|
|
||
|
// Video codec types
|
||
|
enum VideoCodecType
|
||
|
{
|
||
|
kVideoCodecH263,
|
||
|
kVideoCodecH264,
|
||
|
kVideoCodecVP8,
|
||
|
kVideoCodecMPEG4,
|
||
|
kVideoCodecI420,
|
||
|
kVideoCodecRED,
|
||
|
kVideoCodecULPFEC,
|
||
|
kVideoCodecUnknown
|
||
|
};
|
||
|
|
||
|
union VideoCodecUnion
|
||
|
{
|
||
|
VideoCodecH263 H263;
|
||
|
VideoCodecH264 H264;
|
||
|
VideoCodecVP8 VP8;
|
||
|
VideoCodecMPEG4 MPEG4;
|
||
|
VideoCodecGeneric Generic;
|
||
|
};
|
||
|
|
||
|
// Common video codec properties
|
||
|
struct VideoCodec
|
||
|
{
|
||
|
VideoCodecType codecType;
|
||
|
char plName[kPayloadNameSize];
|
||
|
unsigned char plType;
|
||
|
|
||
|
unsigned short width;
|
||
|
unsigned short height;
|
||
|
|
||
|
unsigned int startBitrate;
|
||
|
unsigned int maxBitrate;
|
||
|
unsigned int minBitrate;
|
||
|
unsigned char maxFramerate;
|
||
|
|
||
|
VideoCodecUnion codecSpecific;
|
||
|
|
||
|
unsigned int qpMax;
|
||
|
};
|
||
|
|
||
|
} // namespace webrtc
|
||
|
|
||
|
#endif // WEBRTC_COMMON_TYPES_H
|