common_types.h revision c55a96383497a772a307b346368133960b02ad03
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