common_types.h revision e48d5845c8b35de2ab73ea055c18a61fa3a9f0be
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * that can be found in the LICENSE file in the root of the source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * tree. An additional intellectual property rights grant can be found 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in the file PATENTS. All contributing project authors may 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * be found in the AUTHORS file in the root of the source tree. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef WEBRTC_COMMON_TYPES_H 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define WEBRTC_COMMON_TYPES_H 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "typedefs.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef WEBRTC_EXPORT 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define WEBRTC_DLLEXPORT _declspec(dllexport) 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#elif WEBRTC_DLL 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) #define WEBRTC_DLLEXPORT _declspec(dllimport) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define WEBRTC_DLLEXPORT 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NULL 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define NULL 0 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace webrtc { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InStream 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int Read(void *buf,int len) = 0; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int Rewind() {return -1;} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~InStream() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InStream() {} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OutStream 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Write(const void *buf,int len) = 0; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int Rewind() {return -1;} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~OutStream() {} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OutStream() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum TraceModule 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // not a module, triggered from the engine code 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVoice = 0x0001, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not a module, triggered from the engine code 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVideo = 0x0002, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not a module, triggered from the utility code 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kTraceUtility = 0x0003, 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kTraceRtpRtcp = 0x0004, 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kTraceTransport = 0x0005, 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) kTraceSrtp = 0x0006, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceAudioCoding = 0x0007, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceAudioMixerServer = 0x0008, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceAudioMixerClient = 0x0009, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceFile = 0x000a, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceAudioProcessing = 0x000b, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVideoCoding = 0x0010, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVideoMixer = 0x0011, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceAudioDevice = 0x0012, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVideoRenderer = 0x0014, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVideoCapture = 0x0015, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceVideoPreocessing = 0x0016 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum TraceLevel 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceNone = 0x0000, // no trace 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceStateInfo = 0x0001, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceWarning = 0x0002, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceError = 0x0004, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceCritical = 0x0008, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceApiCall = 0x0010, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceDefault = 0x00ff, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceModuleCall = 0x0020, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceMemory = 0x0100, // memory info 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceTimer = 0x0200, // timing info 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceStream = 0x0400, // "continuous" stream of data 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used for debug purposes 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceDebug = 0x0800, // debug 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceInfo = 0x1000, // debug info 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTraceAll = 0xffff 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// External Trace API 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TraceCallback 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles){ 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Print(const TraceLevel level, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *traceString, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int length) = 0; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TraceCallback() {} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TraceCallback() {} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum FileFormats 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatWavFile = 1, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatCompressedFile = 2, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatAviFile = 3, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatPreencodedFile = 4, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatPcm16kHzFile = 7, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatPcm8kHzFile = 8, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFileFormatPcm32kHzFile = 9 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum ProcessingTypes 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPlaybackPerChannel = 0, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPlaybackAllChannelsMixed, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRecordingPerChannel, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRecordingAllChannelsMixed 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Encryption enums 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum CipherTypes 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCipherNull = 0, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kCipherAes128CounterMode = 1 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum AuthenticationTypes 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAuthNull = 0, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAuthHmacSha1 = 3 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum SecurityLevels 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kNoProtection = 0, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kEncryption = 1, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAuthentication = 2, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kEncryptionAndAuthentication = 3 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Encryption 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void encrypt( 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int channel_no, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* in_data, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* out_data, 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int bytes_in, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* bytes_out) = 0; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void decrypt( 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int channel_no, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* in_data, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* out_data, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int bytes_in, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* bytes_out) = 0; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void encrypt_rtcp( 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int channel_no, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* in_data, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* out_data, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int bytes_in, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* bytes_out) = 0; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void decrypt_rtcp( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int channel_no, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* in_data, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char* out_data, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int bytes_in, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int* bytes_out) = 0; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Encryption() {} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Encryption() {} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// External transport callback interface 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Transport 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int SendPacket(int channel, const void *data, int len) = 0; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int SendRTCPPacket(int channel, const void *data, int len) = 0; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Transport() {} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Transport() {} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ================================================================== 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Voice specific types 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ================================================================== 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Each codec supported can be described by this structure. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CodecInst 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pltype; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char plname[32]; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int plfreq; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pacsize; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int channels; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rate; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum FrameType 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFrameEmpty = 0, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAudioFrameSpeech = 1, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAudioFrameCN = 2, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVideoFrameKey = 3, // independent frame 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVideoFrameDelta = 4, // depends on the previus frame 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVideoFrameGolden = 5, // depends on a old known previus frame 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVideoFrameAltRef = 6 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RTP 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum {kRtpCsrcSize = 15}; // RFC 3550 page 13 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum RTPDirections 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRtpIncoming = 0, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kRtpOutgoing 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum PayloadFrequencies 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFreq8000Hz = 8000, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFreq16000Hz = 16000, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFreq32000Hz = 32000 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum VadModes // degree of bandwidth reduction 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVadConventional = 0, // lowest reduction 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVadAggressiveLow, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVadAggressiveMid, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kVadAggressiveHigh // highest reduction 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct NetworkStatistics // NETEQ statistics 2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{ 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current jitter buffer size in ms 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 currentBufferSize; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preferred (optimal) buffer size in ms 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 preferredBufferSize; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loss rate (network + late) in percent (in Q14) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 currentPacketLossRate; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // late loss rate in percent (in Q14) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 currentDiscardRate; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fraction (of original stream) of synthesized speech inserted through 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expansion (in Q14) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 currentExpandRate; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fraction of synthesized speech inserted through pre-emptive expansion 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (in Q14) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 currentPreemptiveRate; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fraction of data removed through acceleration (in Q14) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebRtc_UWord16 currentAccelerateRate; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 268struct JitterStatistics 269{ 270 // smallest Jitter Buffer size during call in ms 271 WebRtc_UWord32 jbMinSize; 272 // largest Jitter Buffer size during call in ms 273 WebRtc_UWord32 jbMaxSize; 274 // the average JB size, measured over time - ms 275 WebRtc_UWord32 jbAvgSize; 276 // number of times the Jitter Buffer changed (using Accelerate or 277 // Pre-emptive Expand) 278 WebRtc_UWord32 jbChangeCount; 279 // amount (in ms) of audio data received late 280 WebRtc_UWord32 lateLossMs; 281 // milliseconds removed to reduce jitter buffer size 282 WebRtc_UWord32 accelerateMs; 283 // milliseconds discarded through buffer flushing 284 WebRtc_UWord32 flushedMs; 285 // milliseconds of generated silence 286 WebRtc_UWord32 generatedSilentMs; 287 // milliseconds of synthetic audio data (non-background noise) 288 WebRtc_UWord32 interpolatedVoiceMs; 289 // milliseconds of synthetic audio data (background noise level) 290 WebRtc_UWord32 interpolatedSilentMs; 291 // count of tiny expansions in output audio 292 WebRtc_UWord32 countExpandMoreThan120ms; 293 // count of small expansions in output audio 294 WebRtc_UWord32 countExpandMoreThan250ms; 295 // count of medium expansions in output audio 296 WebRtc_UWord32 countExpandMoreThan500ms; 297 // count of long expansions in output audio 298 WebRtc_UWord32 countExpandMoreThan2000ms; 299 // duration of longest audio drop-out 300 WebRtc_UWord32 longestExpandDurationMs; 301 // count of times we got small network outage (inter-arrival time in 302 // [500, 1000) ms) 303 WebRtc_UWord32 countIAT500ms; 304 // count of times we got medium network outage (inter-arrival time in 305 // [1000, 2000) ms) 306 WebRtc_UWord32 countIAT1000ms; 307 // count of times we got large network outage (inter-arrival time >= 308 // 2000 ms) 309 WebRtc_UWord32 countIAT2000ms; 310 // longest packet inter-arrival time in ms 311 WebRtc_UWord32 longestIATms; 312 // min time incoming Packet "waited" to be played 313 WebRtc_UWord32 minPacketDelayMs; 314 // max time incoming Packet "waited" to be played 315 WebRtc_UWord32 maxPacketDelayMs; 316 // avg time incoming Packet "waited" to be played 317 WebRtc_UWord32 avgPacketDelayMs; 318}; 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