common_types.h revision c55a96383497a772a307b346368133960b02ad03
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *  Use of this source code is governed by a BSD-style license
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *  that can be found in the LICENSE file in the root of the source
69d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org *  tree. An additional intellectual property rights grant can be found
79d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org *  in the file PATENTS.  All contributing project authors may
89d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org */
109d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com#ifndef WEBRTC_COMMON_TYPES_H
129d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org#define WEBRTC_COMMON_TYPES_H
1381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com
14b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com#include "typedefs.h"
15fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org
16181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#ifdef WEBRTC_EXPORT
17181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com    #define WEBRTC_DLLEXPORT _declspec(dllexport)
1881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com#elif WEBRTC_DLL
1981712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    #define WEBRTC_DLLEXPORT _declspec(dllimport)
20181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com#else
21181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com    #define WEBRTC_DLLEXPORT
22383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#endif
23383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com
24383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#ifndef NULL
25b9086a026844e4cfd08b219e49ce3f12294cba98bsalomon@google.com    #define NULL 0
26383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com#endif
27383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com
28383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comnamespace webrtc {
29383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.com
30383963280ddd13030331765fe88d2aefa3e32130bsalomon@google.comclass InStream
31181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com{
3281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.compublic:
33181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com    virtual int Read(void *buf,int len) = 0;
34181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com    virtual int Rewind() {return -1;}
35181e9bd9484ece4132e0cc5cfcff602134e5489dbsalomon@google.com    virtual ~InStream() {}
36b5b3168a645802f66233234a06dd5a3764f18018bsalomon@google.comprotected:
374b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    InStream() {}
389d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org};
399d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
4081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.comclass OutStream
41c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com{
42afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.compublic:
43c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    virtual bool Write(const void *buf,int len) = 0;
44f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org    virtual int Rewind() {return -1;}
45c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    virtual ~OutStream() {}
4681712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.comprotected:
47c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    OutStream() {}
489d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org};
499d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
509d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgenum TraceModule
519d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org{
529d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    // not a module, triggered from the engine code
539d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceVoice              = 0x0001,
542047f00e4698f83499ab91911999a65c21a951c9epoger@google.com    // not a module, triggered from the engine code
5561f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceVideo              = 0x0002,
5661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    // not a module, triggered from the utility code
5761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceUtility            = 0x0003,
5861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceRtpRtcp            = 0x0004,
5961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceTransport          = 0x0005,
6061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceSrtp               = 0x0006,
6161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceAudioCoding        = 0x0007,
6261f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kTraceAudioMixerServer   = 0x0008,
639d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceAudioMixerClient   = 0x0009,
649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceFile               = 0x000a,
659d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceAudioProcessing    = 0x000b,
669d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceVideoCoding        = 0x0010,
67c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    kTraceVideoMixer         = 0x0011,
68c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    kTraceAudioDevice        = 0x0012,
6981712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    kTraceVideoRenderer      = 0x0014,
70c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    kTraceVideoCapture       = 0x0015,
71c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    kTraceVideoPreocessing   = 0x0016
729d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org};
739d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
749d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgenum TraceLevel
759d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org{
769d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceNone               = 0x0000,    // no trace
779d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceStateInfo          = 0x0001,
789d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceWarning            = 0x0002,
799d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceError              = 0x0004,
8081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    kTraceCritical           = 0x0008,
8181712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    kTraceApiCall            = 0x0010,
829d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceDefault            = 0x00ff,
8381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com
849d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceModuleCall         = 0x0020,
859d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceMemory             = 0x0100,   // memory info
869d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceTimer              = 0x0200,   // timing info
879d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceStream             = 0x0400,   // "continuous" stream of data
889d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
899d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    // used for debug purposes
909d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceDebug              = 0x0800,  // debug
919d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kTraceInfo               = 0x1000,  // debug info
9281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com
93c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    kTraceAll                = 0xffff
94afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.com};
95c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com
96f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org// External Trace API
97c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.comclass TraceCallback
9881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com{
99c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.compublic:
100c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    virtual void Print(const TraceLevel level,
1012047f00e4698f83499ab91911999a65c21a951c9epoger@google.com                       const char *traceString,
102c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com                       const int length) = 0;
1039d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgprotected:
1049d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    virtual ~TraceCallback() {}
1052047f00e4698f83499ab91911999a65c21a951c9epoger@google.com    TraceCallback() {}
10661f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com};
10761f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com
10861f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com
10961f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.comenum FileFormats
11061f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com{
11161f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kFileFormatWavFile        = 1,
11261f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kFileFormatCompressedFile = 2,
11361f3bde1ba114e7b39b53411f4aa31ed0875d159bsalomon@google.com    kFileFormatAviFile        = 3,
1149d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kFileFormatPreencodedFile = 4,
1159d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kFileFormatPcm16kHzFile   = 7,
1169d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kFileFormatPcm8kHzFile    = 8,
1179d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kFileFormatPcm32kHzFile   = 9
118c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com};
119c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com
120c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com
12181712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.comenum ProcessingTypes
122c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com{
123c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    kPlaybackPerChannel = 0,
1249d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kPlaybackAllChannelsMixed,
1259d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kRecordingPerChannel,
1269d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kRecordingAllChannelsMixed
1279d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org};
1289d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1299d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org// Encryption enums
1309d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgenum CipherTypes
1319d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org{
13281712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    kCipherNull               = 0,
13381712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    kCipherAes128CounterMode  = 1
13481712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com};
1359d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1369d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgenum AuthenticationTypes
13781712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com{
13881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com    kAuthNull       = 0,
1399d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kAuthHmacSha1   = 3
14081712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com};
1419d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1429d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgenum SecurityLevels
1439d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org{
1449d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kNoProtection                    = 0,
1459d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kEncryption                      = 1,
1469d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    kAuthentication                  = 2,
1478d033a1b125886c62906d975b5cc28a382064526bsalomon@google.com    kEncryptionAndAuthentication     = 3
14881712883419f76e25d2ffec38a9438284a45a48dbsalomon@google.com};
149c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com
150afec7ba75962517b17293799d3fc70d39fa7dbf2tomhudson@google.comclass Encryption
151c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com{
152f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.orgpublic:
153c10a88825d119054a9f4e7b7af7a3f887e30ab6btomhudson@google.com    virtual void encrypt(
1549d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int channel_no,
1559d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        unsigned char* in_data,
1569d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        unsigned char* out_data,
1579d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int bytes_in,
1589d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int* bytes_out) = 0;
159129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org
16094b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com    virtual void decrypt(
1619d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int channel_no,
1629d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        unsigned char* in_data,
16394b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com        unsigned char* out_data,
1649d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int bytes_in,
16594b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com        int* bytes_out) = 0;
16694b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com
1679d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    virtual void encrypt_rtcp(
1689d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int channel_no,
16994b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com        unsigned char* in_data,
1709d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        unsigned char* out_data,
1719d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int bytes_in,
17294b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com        int* bytes_out) = 0;
1739d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1749d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    virtual void decrypt_rtcp(
17594b284d719ee5ccd3e2efbd1d7084ec554583bacbsalomon@google.com        int channel_no,
1769d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        unsigned char* in_data,
1779d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        unsigned char* out_data,
1789d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int bytes_in,
1799d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org        int* bytes_out) = 0;
1809d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1819d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgprotected:
1829d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    virtual ~Encryption() {}
1839d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org    Encryption() {}
1849d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org};
1859d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org
1869d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.org// External transport callback interface
1879d18b7873ce9b44f130a41e0cbd0a3df76ab9adfsenorblanco@chromium.orgclass Transport
18869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com{
1891971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.compublic:
1905e9bf82814aa5d1503c39dd14c420d6db30055dcbsalomon@google.com    virtual int SendPacket(int channel, const void *data, int len) = 0;
1915e9bf82814aa5d1503c39dd14c420d6db30055dcbsalomon@google.com    virtual int SendRTCPPacket(int channel, const void *data, int len) = 0;
1925e9bf82814aa5d1503c39dd14c420d6db30055dcbsalomon@google.com
1931971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.comprotected:
194dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    virtual ~Transport() {}
195dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    Transport() {}
196dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com};
197dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com
198f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org// ==================================================================
199f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org// Voice specific types
200f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org// ==================================================================
201dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com
202f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org// Each codec supported can be described by this structure.
203f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.orgstruct CodecInst
204f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org{
205f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int pltype;
206f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    char plname[32];
207f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int plfreq;
208f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int pacsize;
209f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int channels;
210f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int rate;
211f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org};
212f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org
2138491d24bdc3f48f67475c12c60babb9f9dba8047skia.committer@gmail.comenum FrameType
214f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org{
215dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kFrameEmpty            = 0,
216dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kAudioFrameSpeech      = 1,
217dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kAudioFrameCN          = 2,
218dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kVideoFrameKey         = 3,    // independent frame
219dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kVideoFrameDelta       = 4,    // depends on the previus frame
220dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kVideoFrameGolden      = 5,    // depends on a old known previus frame
221dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kVideoFrameAltRef      = 6
222dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com};
223dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com
224dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com// RTP
225dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.comenum {kRtpCsrcSize = 15}; // RFC 3550 page 13
226dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com
227dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.comenum RTPDirections
228dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com{
229dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kRtpIncoming = 0,
230dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kRtpOutgoing
231dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com};
23220e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com
23320e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.comenum PayloadFrequencies
23420e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com{
23520e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com    kFreq8000Hz = 8000,
23620e542e00eccaf7b9e81964692a47086e6aaf568bsalomon@google.com    kFreq16000Hz = 16000,
237dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kFreq32000Hz = 32000
2381971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com};
2391971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com
2401971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.comenum VadModes                 // degree of bandwidth reduction
2411971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com{
2421971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    kVadConventional = 0,      // lowest reduction
2431971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    kVadAggressiveLow,
2441971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    kVadAggressiveMid,
2451971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    kVadAggressiveHigh         // highest reduction
246dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com};
247dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com
248dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.comstruct NetworkStatistics           // NETEQ statistics
2491971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com{
2501971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    // current jitter buffer size in ms
251dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    WebRtc_UWord16 currentBufferSize;
252dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    // preferred (optimal) buffer size in ms
253f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    WebRtc_UWord16 preferredBufferSize;
254f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // adding extra delay due to "peaky jitter"
255f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    bool jitterPeaksFound;
256f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // loss rate (network + late) in percent (in Q14)
257f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    WebRtc_UWord16 currentPacketLossRate;
258f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // late loss rate in percent (in Q14)
259f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    WebRtc_UWord16 currentDiscardRate;
260f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // fraction (of original stream) of synthesized speech inserted through
261f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // expansion (in Q14)
262f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    WebRtc_UWord16 currentExpandRate;
263f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // fraction of synthesized speech inserted through pre-emptive expansion
264f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // (in Q14)
265f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    WebRtc_UWord16 currentPreemptiveRate;
266f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // fraction of data removed through acceleration (in Q14)
267f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    WebRtc_UWord16 currentAccelerateRate;
268f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // clock-drift in parts-per-million (negative or positive)
2698491d24bdc3f48f67475c12c60babb9f9dba8047skia.committer@gmail.com    int32_t clockDriftPPM;
270f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // average packet waiting time in the jitter buffer (ms)
271f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int meanWaitingTimeMs;
272f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // median packet waiting time in the jitter buffer (ms)
273f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int medianWaitingTimeMs;
274f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    // max packet waiting time in the jitter buffer (ms)
275f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int maxWaitingTimeMs;
276f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org};
277f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org
278f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.orgtypedef struct
279f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org{
280f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int min;              // minumum
281f543fd9e8c162b65fd04d1d9439b60911f8eb4c0commit-bot@chromium.org    int max;              // maximum
2821971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    int average;          // average
2831971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com} StatVal;
2844b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org
285f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.orgtypedef struct           // All levels are reported in dBm0
286f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org{
2871971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal speech_rx;   // long-term speech levels on receiving side
2881971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal speech_tx;   // long-term speech levels on transmitting side
2891971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal noise_rx;    // long-term noise/silence levels on receiving side
2901971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal noise_tx;    // long-term noise/silence levels on transmitting side
2911971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com} LevelStatistics;
2921971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com
2931971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.comtypedef struct        // All levels are reported in dB
2941971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com{
2951971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal erl;      // Echo Return Loss
2961971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal erle;     // Echo Return Loss Enhancement
2971971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal rerl;     // RERL = ERL + ERLE
2981971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    // Echo suppression inside EC at the point just before its NLP
2991971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    StatVal a_nlp;
3001971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com} EchoStatistics;
3011971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com
3021971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.comenum TelephoneEventDetectionMethods
3031971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com{
3041971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    kInBand = 0,
3051971317bb43580330a9e7e9a1c09c5025fe84aacbsalomon@google.com    kOutOfBand = 1,
306dc3c78076ea279d4f6d502b3b42471e9b2bba48ebsalomon@google.com    kInAndOutOfBand = 2
30769cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com};
30869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com
309139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.orgenum NsModes    // type of Noise Suppression
310139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org{
311139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsUnchanged = 0,   // previously set mode
312139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsDefault,         // platform default
313139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsConference,      // conferencing default
314139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsLowSuppression,  // lowest suppression
315139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsModerateSuppression,
316139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsHighSuppression,
317139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kNsVeryHighSuppression,     // highest suppression
318139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org};
319139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org
320139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.orgenum AgcModes                  // type of Automatic Gain Control
321139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org{
322139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kAgcUnchanged = 0,        // previously set mode
323139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kAgcDefault,              // platform default
324139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    // adaptive mode for use when analog volume control exists (e.g. for
325139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    // PC softphone)
326139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kAgcAdaptiveAnalog,
327139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    // scaling takes place in the digital domain (e.g. for conference servers
328139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    // and embedded devices)
329139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kAgcAdaptiveDigital,
330139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    // can be used on embedded devices where the the capture signal is level
331139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    // is predictable
332139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kAgcFixedDigital
333139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org};
334139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org
335139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org// EC modes
336139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.orgenum EcModes                   // type of Echo Control
337139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org{
338139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kEcUnchanged = 0,          // previously set mode
339139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kEcDefault,                // platform default
340139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kEcConference,             // conferencing default (aggressive AEC)
341139484095f014ab08265c32337fddeeec6c0877dcommit-bot@chromium.org    kEcAec,                    // Acoustic Echo Cancellation
34269cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kEcAecm,                   // AEC mobile
343a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
344a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
345a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// AECM modes
346a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum AecmModes                 // mode of AECM
347a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
348a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAecmQuietEarpieceOrHeadset = 0,
349a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com                               // Quiet earpiece or headset use
350a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAecmEarpiece,             // most earpiece use
351a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAecmLoudEarpiece,         // Loud earpiece or quiet speakerphone use
352a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAecmSpeakerphone,         // most speakerphone use (default)
353a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAecmLoudSpeakerphone      // Loud speakerphone
354a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
355a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
356a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// AGC configuration
357a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comtypedef struct
358a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
359a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned short targetLeveldBOv;
360a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned short digitalCompressionGaindB;
361a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    bool           limiterEnable;
362a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com} AgcConfig;                  // AGC configuration parameters
363f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org
364a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum StereoChannel
365a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
366a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kStereoLeft = 0,
367a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kStereoRight,
368a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kStereoBoth
369a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
370a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
371a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// Audio device layers
372a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum AudioLayers
373a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
374a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAudioPlatformDefault = 0,
375a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAudioWindowsWave = 1,
376f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org    kAudioWindowsCore = 2,
377a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAudioLinuxAlsa = 3,
378a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kAudioLinuxPulse = 4
379a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
380a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
381a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum NetEqModes             // NetEQ playout configurations
382a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
383a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // Optimized trade-off between low delay and jitter robustness for two-way
38469cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    // communication.
385a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kNetEqDefault = 0,
386a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // Improved jitter robustness at the cost of increased delay. Can be
387a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // used in one-way communication.
38869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kNetEqStreaming = 1,
38969cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    // Optimzed for decodability of fax signals rather than for perceived audio
39054ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    // quality.
39154ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kNetEqFax = 2,
39254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com};
39354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
394a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum NetEqBgnModes          // NetEQ Background Noise (BGN) configurations
395a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
396a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // BGN is always on and will be generated when the incoming RTP stream
397a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // stops (default).
398a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kBgnOn = 0,
399a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // The BGN is faded to zero (complete silence) after a few seconds.
400a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kBgnFade = 1,
401a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // BGN is not used at all. Silence is produced after speech extrapolation
402a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    // has faded.
403a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kBgnOff = 2,
404a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
405a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
406a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum OnHoldModes            // On Hold direction
407a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
408a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kHoldSendAndPlay = 0,    // Put both sending and playing in on-hold state.
409a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kHoldSendOnly,           // Put only sending in on-hold state.
410a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kHoldPlayOnly            // Put only playing in on-hold state.
41154ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com};
41254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
41354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comenum AmrMode
414d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com{
41554ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kRfc3267BwEfficient = 0,
41654ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kRfc3267OctetAligned = 1,
41754ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kRfc3267FileStorage = 2,
41854ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com};
41954ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
42054ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com// ==================================================================
42154ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com// Video specific types
42254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com// ==================================================================
42354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
42454ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com// Raw video types
42554ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comenum RawVideoType
42654ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com{
42754ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoI420     = 0,
42854ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoYV12     = 1,
42954ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoYUY2     = 2,
43054ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoUYVY     = 3,
43154ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoIYUV     = 4,
43254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoARGB     = 5,
43354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoRGB24    = 6,
43454ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoRGB565   = 7,
43554ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoARGB4444 = 8,
43654ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoARGB1555 = 9,
43754ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoMJPEG    = 10,
43854ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoNV12     = 11,
43954ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoNV21     = 12,
44054ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoBGRA     = 13,
44154ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kVideoUnknown  = 99
44254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com};
44354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
44454ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com// Video codec
44554ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comenum { kConfigParameterSize = 128};
44654ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comenum { kPayloadNameSize = 32};
44754ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comenum { kMaxSimulcastStreams = 4};
44854ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comenum { kMaxTemporalStreams = 4};
44954ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
45054ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com// H.263 specific
45154ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.comstruct VideoCodecH263
45254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com{
45354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    char quality;
45454ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com};
45554ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com
456a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// H.264 specific
45769cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.comenum H264Packetization
45869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com{
459a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kH264SingleMode         = 0,
460a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kH264NonInterleavedMode = 1
46169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com};
462a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
46369cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.comenum VideoCodecComplexity
46469cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com{
46569cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kComplexityNormal = 0,
46669cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kComplexityHigh    = 1,
46769cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kComplexityHigher  = 2,
46854ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    kComplexityMax     = 3
469a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
47069cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com
47169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.comenum VideoCodecProfile
47269cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com{
47369cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kProfileBase = 0x00,
474a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kProfileMain = 0x01
475a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
476a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
477a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comenum VP8ResilienceMode {
47854ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com  kResilienceOff,    // The stream produced by the encoder requires a
479a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com                     // recovery frame (typically a key frame) to be
480a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com                     // decodable after a packet loss.
481a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com  kResilientStream,  // A stream produced by the encoder is resilient to
482a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com                     // packet losses, but packets within a frame subsequent
483a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com                     // to a loss can't be decoded.
484a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com  kResilientFrames   // Same as kResilientStream but with added resilience
485a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com                     // within a frame.
486a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
487a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
488a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comstruct VideoCodecH264
489a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
490a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    H264Packetization          packetization;
491a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    VideoCodecComplexity       complexity;
49254ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    VideoCodecProfile          profile;
49354ad851361c55466f1e4950585afc2aa6cf173c5bsalomon@google.com    char                       level;
494a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    char                       quality;
495a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
496a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    bool                       useFMO;
497a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
498a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned char              configParameters[kConfigParameterSize];
499a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned char              configParametersSize;
500a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
501a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
502a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// VP8 specific
503a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comstruct VideoCodecVP8
504a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
505a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    bool                 pictureLossIndicationOn;
506a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    bool                 feedbackModeOn;
50769cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    VideoCodecComplexity complexity;
508a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    VP8ResilienceMode    resilience;
509a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned char        numberOfTemporalLayers;
510a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
511a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
512a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// MPEG-4 specific
513a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comstruct VideoCodecMPEG4
514a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
515a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned char   configParameters[kConfigParameterSize];
516a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    unsigned char   configParametersSize;
517a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    char            level;
518a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
519a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com
520a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com// Unknown specific
521a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.comstruct VideoCodecGeneric
52269cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com{
52369cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com};
52469cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com
52569cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com// Video codec types
52669cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.comenum VideoCodecType
527a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
528a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kVideoCodecH263,
52969cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kVideoCodecH264,
53069cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kVideoCodecVP8,
53169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kVideoCodecMPEG4,
53269cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    kVideoCodecI420,
533a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kVideoCodecRED,
534a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kVideoCodecULPFEC,
535a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com    kVideoCodecUnknown
536a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com};
53769cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com
53869cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.comunion VideoCodecUnion
539a51ab8416db9772a2eae3122f4f69801642daeb5bsalomon@google.com{
54069cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    VideoCodecH263      H263;
54169cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    VideoCodecH264      H264;
54269cc6ad20ed03f35f9d3c8119a2c32187669a22bbsalomon@google.com    VideoCodecVP8       VP8;
543858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    VideoCodecMPEG4     MPEG4;
544858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    VideoCodecGeneric   Generic;
545858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org};
546858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org
547858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org/*
548858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org*  Simulcast is when the same stream is encoded multiple times with different
549858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org*  settings such as resolution.
550858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org*/
551858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.orgstruct SimulcastStream
552858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org{
553858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned short      width;
554858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned short      height;
555858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned char       numberOfTemporalLayers;
556858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned int        maxBitrate;
557858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned int        qpMax; // minimum quality
558858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org};
559858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org
560858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org// Common video codec properties
561858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.orgstruct VideoCodec
562858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org{
563858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    VideoCodecType      codecType;
564858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    char                plName[kPayloadNameSize];
565858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned char       plType;
566858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org
567858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned short      width;
568858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned short      height;
569858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org
570858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned int        startBitrate;
571858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned int        maxBitrate;
572858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned int        minBitrate;
573858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned char       maxFramerate;
574858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org
575858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    VideoCodecUnion     codecSpecific;
576858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org
577858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned int        qpMax;
578858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    unsigned char       numberOfSimulcastStreams;
579858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org    SimulcastStream     simulcastStream[kMaxSimulcastStreams];
580858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org};
581858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org}  // namespace webrtc
582858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org#endif  // WEBRTC_COMMON_TYPES_H
583858638d8a5bef8f9940ccec2346a9bcc5f804979commit-bot@chromium.org