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