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