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