common_types.h revision 4e51691e58d8d32590b03c1951cb13de4d1c4758
1f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer/* 2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * 4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * Use of this source code is governed by a BSD-style license 5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * that can be found in the LICENSE file in the root of the source 6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * tree. An additional intellectual property rights grant can be found 7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * in the file PATENTS. All contributing project authors may 8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum * be found in the AUTHORS file in the root of the source tree. 9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum */ 10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifndef WEBRTC_COMMON_TYPES_H 12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define WEBRTC_COMMON_TYPES_H 13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "typedefs.h" 15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifdef WEBRTC_EXPORT 17b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum #define WEBRTC_DLLEXPORT _declspec(dllexport) 18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#elif WEBRTC_DLL 19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum #define WEBRTC_DLLEXPORT _declspec(dllimport) 20f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#else 21f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer #define WEBRTC_DLLEXPORT 22f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#endif 23f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer 24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifndef NULL 25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum #define NULL 0 26f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer#endif 27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace webrtc { 29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass InStream 31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual int Read(void *buf,int len) = 0; 34f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer virtual int Rewind() {return -1;} 35f3fd7ee415ec8a6475a060e29959d04d6158f45fBenjamin Kramer virtual ~InStream() {} 36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumprotected: 37b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum InStream() {} 38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 39b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass OutStream 41b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 43b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual bool Write(const void *buf,int len) = 0; 44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual int Rewind() {return -1;} 45b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual ~OutStream() {} 46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumprotected: 47b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum OutStream() {} 48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 49b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum TraceModule 51b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // not a module, triggered from the engine code 53b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceVoice = 0x0001, 54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // not a module, triggered from the engine code 55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceVideo = 0x0002, 56b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // not a module, triggered from the utility code 57b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceUtility = 0x0003, 58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceRtpRtcp = 0x0004, 59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceTransport = 0x0005, 6027baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer kTraceSrtp = 0x0006, 6127baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer kTraceAudioCoding = 0x0007, 62b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceAudioMixerServer = 0x0008, 63b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceAudioMixerClient = 0x0009, 64b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceFile = 0x000a, 65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceAudioProcessing = 0x000b, 66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceVideoCoding = 0x0010, 67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceVideoMixer = 0x0011, 6827baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer kTraceAudioDevice = 0x0012, 6927baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer kTraceVideoRenderer = 0x0014, 70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceVideoCapture = 0x0015, 71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceVideoPreocessing = 0x0016 72b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 73b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum TraceLevel 75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 76b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceNone = 0x0000, // no trace 77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceStateInfo = 0x0001, 78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceWarning = 0x0002, 79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceError = 0x0004, 80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceCritical = 0x0008, 81b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceApiCall = 0x0010, 82b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceDefault = 0x00ff, 83b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 84b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceModuleCall = 0x0020, 85b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceMemory = 0x0100, // memory info 86b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceTimer = 0x0200, // timing info 87b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceStream = 0x0400, // "continuous" stream of data 88b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 89b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // used for debug purposes 90b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceDebug = 0x0800, // debug 91b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceInfo = 0x1000, // debug info 92b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 93b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kTraceAll = 0xffff 94b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 95b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 96b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// External Trace API 97b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass TraceCallback 98b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 99b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 100b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual void Print(const TraceLevel level, 101b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const char *traceString, 102b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const int length) = 0; 103b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumprotected: 104b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual ~TraceCallback() {} 105b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum TraceCallback() {} 10627baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer}; 10727baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer 108b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 109b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum FileFormats 110b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 111b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFileFormatWavFile = 1, 112b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFileFormatCompressedFile = 2, 113b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFileFormatAviFile = 3, 11427baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer kFileFormatPreencodedFile = 4, 11527baab62e7d6267d9b18e4665c6bb1b75dae10d4Benjamin Kramer kFileFormatPcm16kHzFile = 7, 116b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFileFormatPcm8kHzFile = 8, 117b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFileFormatPcm32kHzFile = 9 118b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 119b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 120b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 121b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum ProcessingTypes 122b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 123b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kPlaybackPerChannel = 0, 124b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kPlaybackAllChannelsMixed, 125b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kRecordingPerChannel, 126b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kRecordingAllChannelsMixed 127b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 128b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 129b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Encryption enums 130b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum CipherTypes 131b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 132b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kCipherNull = 0, 133b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kCipherAes128CounterMode = 1 134b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 135b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 136b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum AuthenticationTypes 137b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 138b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kAuthNull = 0, 139b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kAuthHmacSha1 = 3 140b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 141b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 142b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum SecurityLevels 143b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 144b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kNoProtection = 0, 145b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kEncryption = 1, 146b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kAuthentication = 2, 147b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kEncryptionAndAuthentication = 3 148b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 149b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 150b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass Encryption 151b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 152b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 153b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual void encrypt( 154b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int channel_no, 155b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* in_data, 156b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* out_data, 157b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int bytes_in, 158b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int* bytes_out) = 0; 159b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 160b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual void decrypt( 161b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int channel_no, 162b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* in_data, 163b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* out_data, 164b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int bytes_in, 165b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int* bytes_out) = 0; 166b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 167b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual void encrypt_rtcp( 168b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int channel_no, 169b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* in_data, 170b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* out_data, 171b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int bytes_in, 172b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int* bytes_out) = 0; 173b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 174b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual void decrypt_rtcp( 175b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int channel_no, 176b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* in_data, 177b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned char* out_data, 178b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int bytes_in, 179b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int* bytes_out) = 0; 180b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 181b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumprotected: 182b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual ~Encryption() {} 183b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum Encryption() {} 184b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 185b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 186b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// External transport callback interface 187b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass Transport 188b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 189b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 190b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual int SendPacket(int channel, const void *data, int len) = 0; 191b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual int SendRTCPPacket(int channel, const void *data, int len) = 0; 192b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 193b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumprotected: 194b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum virtual ~Transport() {} 195b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum Transport() {} 196b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 197b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 198b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// ================================================================== 199b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Voice specific types 200b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// ================================================================== 201b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 202b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// Each codec supported can be described by this structure. 203b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumstruct CodecInst 204b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 205b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int pltype; 206b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum char plname[32]; 207b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int plfreq; 208b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int pacsize; 209b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int channels; 210b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum int rate; 211b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 212b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 213b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum FrameType 214b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 215b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFrameEmpty = 0, 216b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kAudioFrameSpeech = 1, 217b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kAudioFrameCN = 2, 218b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVideoFrameKey = 3, // independent frame 219b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVideoFrameDelta = 4, // depends on the previus frame 220b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVideoFrameGolden = 5, // depends on a old known previus frame 221b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVideoFrameAltRef = 6 222b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 223b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 224b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// RTP 225b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum {kRtpCsrcSize = 15}; // RFC 3550 page 13 226b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 227b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum RTPDirections 228b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 229b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kRtpIncoming = 0, 230b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kRtpOutgoing 231b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 232b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 233b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum PayloadFrequencies 234b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 235b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFreq8000Hz = 8000, 236b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFreq16000Hz = 16000, 237b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kFreq32000Hz = 32000 238b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 239b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 240b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumenum VadModes // degree of bandwidth reduction 241b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 242b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVadConventional = 0, // lowest reduction 243b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVadAggressiveLow, 244b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVadAggressiveMid, 245b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum kVadAggressiveHigh // highest reduction 246b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 247b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 248b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumstruct NetworkStatistics // NETEQ statistics 249b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 250b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // current jitter buffer size in ms 251b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 currentBufferSize; 252b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // preferred (optimal) buffer size in ms 253b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 preferredBufferSize; 254b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // loss rate (network + late) in percent (in Q14) 255b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 currentPacketLossRate; 256b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // late loss rate in percent (in Q14) 257b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 currentDiscardRate; 258b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // fraction (of original stream) of synthesized speech inserted through 259b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // expansion (in Q14) 260b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 currentExpandRate; 261b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // fraction of synthesized speech inserted through pre-emptive expansion 262b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // (in Q14) 263b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 currentPreemptiveRate; 264b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // fraction of data removed through acceleration (in Q14) 265b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord16 currentAccelerateRate; 266b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 267b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 268b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumstruct JitterStatistics 269b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum{ 270b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // smallest Jitter Buffer size during call in ms 271b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 jbMinSize; 272b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // largest Jitter Buffer size during call in ms 273b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 jbMaxSize; 274b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // the average JB size, measured over time - ms 275b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 jbAvgSize; 276b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // number of times the Jitter Buffer changed (using Accelerate or 277b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Pre-emptive Expand) 278b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 jbChangeCount; 279b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // amount (in ms) of audio data received late 280b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 lateLossMs; 281b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // milliseconds removed to reduce jitter buffer size 282b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 accelerateMs; 283b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // milliseconds discarded through buffer flushing 284b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 flushedMs; 285b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // milliseconds of generated silence 286b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 generatedSilentMs; 287b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // milliseconds of synthetic audio data (non-background noise) 288b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 interpolatedVoiceMs; 289b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // milliseconds of synthetic audio data (background noise level) 290b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 interpolatedSilentMs; 291b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of tiny expansions in output audio 292b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countExpandMoreThan120ms; 293b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of small expansions in output audio 294b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countExpandMoreThan250ms; 295b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of medium expansions in output audio 296b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countExpandMoreThan500ms; 297b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of long expansions in output audio 298b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countExpandMoreThan2000ms; 299b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // duration of longest audio drop-out 300b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 longestExpandDurationMs; 301b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of times we got small network outage (inter-arrival time in 302b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // [500, 1000) ms) 303b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countIAT500ms; 304b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of times we got medium network outage (inter-arrival time in 305b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // [1000, 2000) ms) 306b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countIAT1000ms; 307b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // count of times we got large network outage (inter-arrival time >= 308b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // 2000 ms) 309b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 countIAT2000ms; 310b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // longest packet inter-arrival time in ms 311b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 longestIATms; 312b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // min time incoming Packet "waited" to be played 313b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 minPacketDelayMs; 314b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // max time incoming Packet "waited" to be played 315b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum WebRtc_UWord32 maxPacketDelayMs; 316b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // avg time incoming Packet "waited" to be played 317d239ff67f210094c205be7e57332948caecf6a24Tony Linthicum WebRtc_UWord32 avgPacketDelayMs; 318b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 319 320typedef struct 321{ 322 int min; // minumum 323 int max; // maximum 324 int average; // average 325} StatVal; 326 327typedef struct // All levels are reported in dBm0 328{ 329 StatVal speech_rx; // long-term speech levels on receiving side 330 StatVal speech_tx; // long-term speech levels on transmitting side 331 StatVal noise_rx; // long-term noise/silence levels on receiving side 332 StatVal noise_tx; // long-term noise/silence levels on transmitting side 333} LevelStatistics; 334 335typedef struct // All levels are reported in dB 336{ 337 StatVal erl; // Echo Return Loss 338 StatVal erle; // Echo Return Loss Enhancement 339 StatVal rerl; // RERL = ERL + ERLE 340 // Echo suppression inside EC at the point just before its NLP 341 StatVal a_nlp; 342} EchoStatistics; 343 344enum TelephoneEventDetectionMethods 345{ 346 kInBand = 0, 347 kOutOfBand = 1, 348 kInAndOutOfBand = 2 349}; 350 351enum NsModes // type of Noise Suppression 352{ 353 kNsUnchanged = 0, // previously set mode 354 kNsDefault, // platform default 355 kNsConference, // conferencing default 356 kNsLowSuppression, // lowest suppression 357 kNsModerateSuppression, 358 kNsHighSuppression, 359 kNsVeryHighSuppression, // highest suppression 360}; 361 362enum AgcModes // type of Automatic Gain Control 363{ 364 kAgcUnchanged = 0, // previously set mode 365 kAgcDefault, // platform default 366 // adaptive mode for use when analog volume control exists (e.g. for 367 // PC softphone) 368 kAgcAdaptiveAnalog, 369 // scaling takes place in the digital domain (e.g. for conference servers 370 // and embedded devices) 371 kAgcAdaptiveDigital, 372 // can be used on embedded devices where the the capture signal is level 373 // is predictable 374 kAgcFixedDigital 375}; 376 377// EC modes 378enum EcModes // type of Echo Control 379{ 380 kEcUnchanged = 0, // previously set mode 381 kEcDefault, // platform default 382 kEcConference, // conferencing default (aggressive AEC) 383 kEcAec, // Acoustic Echo Cancellation 384 kEcAecm, // AEC mobile 385}; 386 387// AECM modes 388enum AecmModes // mode of AECM 389{ 390 kAecmQuietEarpieceOrHeadset = 0, 391 // Quiet earpiece or headset use 392 kAecmEarpiece, // most earpiece use 393 kAecmLoudEarpiece, // Loud earpiece or quiet speakerphone use 394 kAecmSpeakerphone, // most speakerphone use (default) 395 kAecmLoudSpeakerphone // Loud speakerphone 396}; 397 398// AGC configuration 399typedef struct 400{ 401 unsigned short targetLeveldBOv; 402 unsigned short digitalCompressionGaindB; 403 bool limiterEnable; 404} AgcConfig; // AGC configuration parameters 405 406enum StereoChannel 407{ 408 kStereoLeft = 0, 409 kStereoRight, 410 kStereoBoth 411}; 412 413// Audio device layers 414enum AudioLayers 415{ 416 kAudioPlatformDefault = 0, 417 kAudioWindowsWave = 1, 418 kAudioWindowsCore = 2, 419 kAudioLinuxAlsa = 3, 420 kAudioLinuxPulse = 4 421}; 422 423enum NetEqModes // NetEQ playout configurations 424{ 425 // Optimized trade-off between low delay and jitter robustness for two-way 426 // communication. 427 kNetEqDefault = 0, 428 // Improved jitter robustness at the cost of increased delay. Can be 429 // used in one-way communication. 430 kNetEqStreaming = 1, 431 // Optimzed for decodability of fax signals rather than for perceived audio 432 // quality. 433 kNetEqFax = 2, 434}; 435 436enum NetEqBgnModes // NetEQ Background Noise (BGN) configurations 437{ 438 // BGN is always on and will be generated when the incoming RTP stream 439 // stops (default). 440 kBgnOn = 0, 441 // The BGN is faded to zero (complete silence) after a few seconds. 442 kBgnFade = 1, 443 // BGN is not used at all. Silence is produced after speech extrapolation 444 // has faded. 445 kBgnOff = 2, 446}; 447 448enum OnHoldModes // On Hold direction 449{ 450 kHoldSendAndPlay = 0, // Put both sending and playing in on-hold state. 451 kHoldSendOnly, // Put only sending in on-hold state. 452 kHoldPlayOnly // Put only playing in on-hold state. 453}; 454 455enum AmrMode 456{ 457 kRfc3267BwEfficient = 0, 458 kRfc3267OctetAligned = 1, 459 kRfc3267FileStorage = 2, 460}; 461 462// ================================================================== 463// Video specific types 464// ================================================================== 465 466// Raw video types 467enum RawVideoType 468{ 469 kVideoI420 = 0, 470 kVideoYV12 = 1, 471 kVideoYUY2 = 2, 472 kVideoUYVY = 3, 473 kVideoIYUV = 4, 474 kVideoARGB = 5, 475 kVideoRGB24 = 6, 476 kVideoRGB565 = 7, 477 kVideoARGB4444 = 8, 478 kVideoARGB1555 = 9, 479 kVideoMJPEG = 10, 480 kVideoNV12 = 11, 481 kVideoNV21 = 12, 482 kVideoUnknown = 99 483}; 484 485// Video codec 486enum { kConfigParameterSize = 128}; 487enum { kPayloadNameSize = 32}; 488 489// H.263 specific 490struct VideoCodecH263 491{ 492 char quality; 493}; 494 495// H.264 specific 496enum H264Packetization 497{ 498 kH264SingleMode = 0, 499 kH264NonInterleavedMode = 1 500}; 501 502enum VideoCodecComplexity 503{ 504 kComplexityNormal = 0, 505 kComplexityHigh = 1, 506 kComplexityHigher = 2, 507 kComplexityMax = 3 508}; 509 510enum VideoCodecProfile 511{ 512 kProfileBase = 0x00, 513 kProfileMain = 0x01 514}; 515 516struct VideoCodecH264 517{ 518 H264Packetization packetization; 519 VideoCodecComplexity complexity; 520 VideoCodecProfile profile; 521 char level; 522 char quality; 523 524 bool useFMO; 525 526 unsigned char configParameters[kConfigParameterSize]; 527 unsigned char configParametersSize; 528}; 529 530// VP8 specific 531struct VideoCodecVP8 532{ 533 bool pictureLossIndicationOn; 534 bool feedbackModeOn; 535 VideoCodecComplexity complexity; 536}; 537 538// MPEG-4 specific 539struct VideoCodecMPEG4 540{ 541 unsigned char configParameters[kConfigParameterSize]; 542 unsigned char configParametersSize; 543 char level; 544}; 545 546// Unknown specific 547struct VideoCodecGeneric 548{ 549}; 550 551// Video codec types 552enum VideoCodecType 553{ 554 kVideoCodecH263, 555 kVideoCodecH264, 556 kVideoCodecVP8, 557 kVideoCodecMPEG4, 558 kVideoCodecI420, 559 kVideoCodecRED, 560 kVideoCodecULPFEC, 561 kVideoCodecUnknown 562}; 563 564union VideoCodecUnion 565{ 566 VideoCodecH263 H263; 567 VideoCodecH264 H264; 568 VideoCodecVP8 VP8; 569 VideoCodecMPEG4 MPEG4; 570 VideoCodecGeneric Generic; 571}; 572 573// Common video codec properties 574struct VideoCodec 575{ 576 VideoCodecType codecType; 577 char plName[kPayloadNameSize]; 578 unsigned char plType; 579 580 unsigned short width; 581 unsigned short height; 582 583 unsigned int startBitrate; 584 unsigned int maxBitrate; 585 unsigned int minBitrate; 586 unsigned char maxFramerate; 587 588 VideoCodecUnion codecSpecific; 589 590 unsigned int qpMax; 591}; 592 593} // namespace webrtc 594 595#endif // WEBRTC_COMMON_TYPES_H 596