git-svn-id: http://webrtc.googlecode.com/svn/trunk@156 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/common_types.h b/src/common_types.h
new file mode 100644
index 0000000..8b0b8a5
--- /dev/null
+++ b/src/common_types.h
@@ -0,0 +1,595 @@
+/*
+ * 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