blob: beb6bcaf505fd5cfe5abd351f315e633c35fe03d [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
phoglund@webrtc.org8bfee842012-02-17 09:32:48 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef COMMON_TYPES_H_
12#define COMMON_TYPES_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
pbos@webrtc.orgf577ae92014-03-19 08:43:57 +000014#include <stddef.h>
mallinath@webrtc.org0209e562014-03-21 00:41:28 +000015#include <string.h>
pbos@webrtc.org1e92b0a2014-05-15 09:35:06 +000016#include <string>
pbos@webrtc.orgf577ae92014-03-19 08:43:57 +000017#include <vector>
18
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "api/array_view.h"
Erik Språng566124a2018-04-23 12:32:22 +020020// TODO(sprang): Remove this include when all usage includes it directly.
21#include "api/video/video_bitrate_allocation.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020022#include "rtc_base/checks.h"
23#include "rtc_base/deprecation.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000024
andrew@webrtc.org88b8b0d2012-08-14 00:05:56 +000025#if defined(_MSC_VER)
26// Disable "new behavior: elements of array will be default initialized"
27// warning. Affects OverUseDetectorOptions.
solenberg634b86e2016-09-01 07:54:53 -070028#pragma warning(disable : 4351)
andrew@webrtc.org88b8b0d2012-08-14 00:05:56 +000029#endif
30
Peter Boström8b79b072016-02-26 16:31:37 +010031#define RTP_PAYLOAD_NAME_SIZE 32u
henrika@webrtc.orgf75901f2012-01-16 08:45:42 +000032
mallinath@webrtc.org0209e562014-03-21 00:41:28 +000033#if defined(WEBRTC_WIN) || defined(WIN32)
andrew@webrtc.orgeda189b2013-09-09 17:50:10 +000034// Compares two strings without regard to case.
35#define STR_CASE_CMP(s1, s2) ::_stricmp(s1, s2)
36// Compares characters of two strings without regard to case.
37#define STR_NCASE_CMP(s1, s2, n) ::_strnicmp(s1, s2, n)
38#else
39#define STR_CASE_CMP(s1, s2) ::strcasecmp(s1, s2)
40#define STR_NCASE_CMP(s1, s2, n) ::strncasecmp(s1, s2, n)
41#endif
42
niklase@google.com470e71d2011-07-07 08:21:25 +000043namespace webrtc {
44
pbos22993e12015-10-19 02:39:06 -070045enum FrameType {
46 kEmptyFrame = 0,
47 kAudioFrameSpeech = 1,
48 kAudioFrameCN = 2,
49 kVideoFrameKey = 3,
50 kVideoFrameDelta = 4,
sprang@webrtc.org71f055f2013-12-04 15:09:27 +000051};
52
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +000053// Statistics for an RTCP channel
sprang@webrtc.orgfe5d36b2013-10-28 09:21:07 +000054struct RtcpStatistics {
sprang@webrtc.orgfe5d36b2013-10-28 09:21:07 +000055 RtcpStatistics()
solenberg634b86e2016-09-01 07:54:53 -070056 : fraction_lost(0),
srte186d9c32017-08-04 05:03:53 -070057 packets_lost(0),
58 extended_highest_sequence_number(0),
solenberg634b86e2016-09-01 07:54:53 -070059 jitter(0) {}
sprang@webrtc.orgfe5d36b2013-10-28 09:21:07 +000060
61 uint8_t fraction_lost;
Danil Chapovalov3daabad2018-08-15 17:12:12 +020062 int32_t packets_lost; // Defined as a 24 bit signed integer in RTCP
63 uint32_t extended_highest_sequence_number;
sprang@webrtc.orgfe5d36b2013-10-28 09:21:07 +000064 uint32_t jitter;
sprang@webrtc.orgfe5d36b2013-10-28 09:21:07 +000065};
66
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +000067class RtcpStatisticsCallback {
68 public:
69 virtual ~RtcpStatisticsCallback() {}
70
71 virtual void StatisticsUpdated(const RtcpStatistics& statistics,
72 uint32_t ssrc) = 0;
pbos@webrtc.orgce4e9a32014-12-18 13:50:16 +000073 virtual void CNameChanged(const char* cname, uint32_t ssrc) = 0;
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +000074};
75
asapersson@webrtc.org8098e072014-02-19 11:59:02 +000076// Statistics for RTCP packet types.
77struct RtcpPacketTypeCounter {
78 RtcpPacketTypeCounter()
solenberg634b86e2016-09-01 07:54:53 -070079 : first_packet_time_ms(-1),
80 nack_packets(0),
81 fir_packets(0),
82 pli_packets(0),
83 nack_requests(0),
84 unique_nack_requests(0) {}
asapersson@webrtc.org8098e072014-02-19 11:59:02 +000085
86 void Add(const RtcpPacketTypeCounter& other) {
87 nack_packets += other.nack_packets;
88 fir_packets += other.fir_packets;
89 pli_packets += other.pli_packets;
asapersson@webrtc.org2dd31342014-10-29 12:42:30 +000090 nack_requests += other.nack_requests;
91 unique_nack_requests += other.unique_nack_requests;
asapersson@webrtc.orgd08d3892014-12-16 12:03:11 +000092 if (other.first_packet_time_ms != -1 &&
solenberg634b86e2016-09-01 07:54:53 -070093 (other.first_packet_time_ms < first_packet_time_ms ||
94 first_packet_time_ms == -1)) {
asapersson@webrtc.orgd08d3892014-12-16 12:03:11 +000095 // Use oldest time.
96 first_packet_time_ms = other.first_packet_time_ms;
97 }
98 }
99
sprang07fb9be2016-02-24 07:55:00 -0800100 void Subtract(const RtcpPacketTypeCounter& other) {
101 nack_packets -= other.nack_packets;
102 fir_packets -= other.fir_packets;
103 pli_packets -= other.pli_packets;
104 nack_requests -= other.nack_requests;
105 unique_nack_requests -= other.unique_nack_requests;
106 if (other.first_packet_time_ms != -1 &&
107 (other.first_packet_time_ms > first_packet_time_ms ||
108 first_packet_time_ms == -1)) {
109 // Use youngest time.
110 first_packet_time_ms = other.first_packet_time_ms;
111 }
112 }
113
asapersson@webrtc.orgd08d3892014-12-16 12:03:11 +0000114 int64_t TimeSinceFirstPacketInMs(int64_t now_ms) const {
115 return (first_packet_time_ms == -1) ? -1 : (now_ms - first_packet_time_ms);
asapersson@webrtc.org8098e072014-02-19 11:59:02 +0000116 }
117
asapersson@webrtc.org2dd31342014-10-29 12:42:30 +0000118 int UniqueNackRequestsInPercent() const {
119 if (nack_requests == 0) {
120 return 0;
121 }
solenberg634b86e2016-09-01 07:54:53 -0700122 return static_cast<int>((unique_nack_requests * 100.0f / nack_requests) +
123 0.5f);
asapersson@webrtc.org2dd31342014-10-29 12:42:30 +0000124 }
125
solenberg634b86e2016-09-01 07:54:53 -0700126 int64_t first_packet_time_ms; // Time when first packet is sent/received.
127 uint32_t nack_packets; // Number of RTCP NACK packets.
128 uint32_t fir_packets; // Number of RTCP FIR packets.
129 uint32_t pli_packets; // Number of RTCP PLI packets.
130 uint32_t nack_requests; // Number of NACKed RTP packets.
asapersson@webrtc.org2dd31342014-10-29 12:42:30 +0000131 uint32_t unique_nack_requests; // Number of unique NACKed RTP packets.
asapersson@webrtc.org8098e072014-02-19 11:59:02 +0000132};
133
pbos@webrtc.org1d0fa5d2015-02-19 12:47:00 +0000134class RtcpPacketTypeCounterObserver {
135 public:
136 virtual ~RtcpPacketTypeCounterObserver() {}
137 virtual void RtcpPacketTypesCounterUpdated(
138 uint32_t ssrc,
139 const RtcpPacketTypeCounter& packet_counter) = 0;
140};
141
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +0000142// Callback, used to notify an observer whenever new rates have been estimated.
143class BitrateStatisticsObserver {
144 public:
145 virtual ~BitrateStatisticsObserver() {}
146
sprangcd349d92016-07-13 09:11:28 -0700147 virtual void Notify(uint32_t total_bitrate_bps,
148 uint32_t retransmit_bitrate_bps,
stefan@webrtc.org0bae1fa2014-11-05 14:05:29 +0000149 uint32_t ssrc) = 0;
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +0000150};
151
pbos@webrtc.orgce4e9a32014-12-18 13:50:16 +0000152struct FrameCounts {
153 FrameCounts() : key_frames(0), delta_frames(0) {}
154 int key_frames;
155 int delta_frames;
156};
157
asapersson@webrtc.orgd08d3892014-12-16 12:03:11 +0000158// Callback, used to notify an observer whenever frame counts have been updated.
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +0000159class FrameCountObserver {
160 public:
sprang@webrtc.org72964bd2013-11-21 09:09:54 +0000161 virtual ~FrameCountObserver() {}
pbos@webrtc.orgce4e9a32014-12-18 13:50:16 +0000162 virtual void FrameCountUpdated(const FrameCounts& frame_counts,
163 uint32_t ssrc) = 0;
sprang@webrtc.orgdc50aae2013-11-20 16:47:07 +0000164};
165
stefan@webrtc.org168f23f2014-07-11 13:44:02 +0000166// Callback, used to notify an observer whenever the send-side delay is updated.
167class SendSideDelayObserver {
168 public:
169 virtual ~SendSideDelayObserver() {}
170 virtual void SendSideDelayUpdated(int avg_delay_ms,
171 int max_delay_ms,
172 uint32_t ssrc) = 0;
173};
174
asapersson35151f32016-05-02 23:44:01 -0700175// Callback, used to notify an observer whenever a packet is sent to the
176// transport.
177// TODO(asapersson): This class will remove the need for SendSideDelayObserver.
178// Remove SendSideDelayObserver once possible.
179class SendPacketObserver {
180 public:
181 virtual ~SendPacketObserver() {}
182 virtual void OnSendPacket(uint16_t packet_id,
183 int64_t capture_time_ms,
184 uint32_t ssrc) = 0;
185};
186
michaelt4da30442016-11-17 01:38:43 -0800187// Callback, used to notify an observer when the overhead per packet
188// has changed.
189class OverheadObserver {
190 public:
191 virtual ~OverheadObserver() = default;
192 virtual void OnOverheadChanged(size_t overhead_bytes_per_packet) = 0;
193};
194
niklase@google.com470e71d2011-07-07 08:21:25 +0000195// ==================================================================
196// Voice specific types
197// ==================================================================
198
199// Each codec supported can be described by this structure.
mallinath@webrtc.org0209e562014-03-21 00:41:28 +0000200struct CodecInst {
201 int pltype;
202 char plname[RTP_PAYLOAD_NAME_SIZE];
203 int plfreq;
204 int pacsize;
Peter Kasting69558702016-01-12 16:26:35 -0800205 size_t channels;
mallinath@webrtc.org0209e562014-03-21 00:41:28 +0000206 int rate; // bits/sec unlike {start,min,max}Bitrate elsewhere in this file!
207
208 bool operator==(const CodecInst& other) const {
209 return pltype == other.pltype &&
210 (STR_CASE_CMP(plname, other.plname) == 0) &&
solenberg634b86e2016-09-01 07:54:53 -0700211 plfreq == other.plfreq && pacsize == other.pacsize &&
212 channels == other.channels && rate == other.rate;
mallinath@webrtc.org0209e562014-03-21 00:41:28 +0000213 }
214
solenberg634b86e2016-09-01 07:54:53 -0700215 bool operator!=(const CodecInst& other) const { return !(*this == other); }
niklase@google.com470e71d2011-07-07 08:21:25 +0000216};
217
niklase@google.com470e71d2011-07-07 08:21:25 +0000218// RTP
solenberg634b86e2016-09-01 07:54:53 -0700219enum { kRtpCsrcSize = 15 }; // RFC 3550 page 13
niklase@google.com470e71d2011-07-07 08:21:25 +0000220
solenberg634b86e2016-09-01 07:54:53 -0700221// NETEQ statistics.
222struct NetworkStatistics {
223 // current jitter buffer size in ms
224 uint16_t currentBufferSize;
225 // preferred (optimal) buffer size in ms
226 uint16_t preferredBufferSize;
227 // adding extra delay due to "peaky jitter"
228 bool jitterPeaksFound;
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200229 // Stats below correspond to similarly-named fields in the WebRTC stats spec.
230 // https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamtrackstats
Steve Anton2dbc69f2017-08-24 17:15:13 -0700231 uint64_t totalSamplesReceived;
Steve Anton2dbc69f2017-08-24 17:15:13 -0700232 uint64_t concealedSamples;
Gustaf Ullberg9a2e9062017-09-18 09:28:20 +0200233 uint64_t concealmentEvents;
Gustaf Ullbergb0a02072017-10-02 12:00:34 +0200234 uint64_t jitterBufferDelayMs;
235 // Stats below DO NOT correspond directly to anything in the WebRTC stats
solenberg634b86e2016-09-01 07:54:53 -0700236 // Loss rate (network + late); fraction between 0 and 1, scaled to Q14.
237 uint16_t currentPacketLossRate;
238 // Late loss rate; fraction between 0 and 1, scaled to Q14.
minyue-webrtc0c3ca752017-08-23 15:59:38 +0200239 union {
240 RTC_DEPRECATED uint16_t currentDiscardRate;
241 };
solenberg634b86e2016-09-01 07:54:53 -0700242 // fraction (of original stream) of synthesized audio inserted through
243 // expansion (in Q14)
244 uint16_t currentExpandRate;
245 // fraction (of original stream) of synthesized speech inserted through
246 // expansion (in Q14)
247 uint16_t currentSpeechExpandRate;
248 // fraction of synthesized speech inserted through pre-emptive expansion
249 // (in Q14)
250 uint16_t currentPreemptiveRate;
251 // fraction of data removed through acceleration (in Q14)
252 uint16_t currentAccelerateRate;
253 // fraction of data coming from secondary decoding (in Q14)
254 uint16_t currentSecondaryDecodedRate;
minyue-webrtc0e320ec2017-08-28 13:51:27 +0200255 // Fraction of secondary data, including FEC and RED, that is discarded (in
256 // Q14). Discarding of secondary data can be caused by the reception of the
257 // primary data, obsoleting the secondary data. It can also be caused by early
258 // or late arrival of secondary data.
minyue-webrtc0c3ca752017-08-23 15:59:38 +0200259 uint16_t currentSecondaryDiscardedRate;
solenberg634b86e2016-09-01 07:54:53 -0700260 // clock-drift in parts-per-million (negative or positive)
261 int32_t clockDriftPPM;
262 // average packet waiting time in the jitter buffer (ms)
263 int meanWaitingTimeMs;
264 // median packet waiting time in the jitter buffer (ms)
265 int medianWaitingTimeMs;
266 // min packet waiting time in the jitter buffer (ms)
267 int minWaitingTimeMs;
268 // max packet waiting time in the jitter buffer (ms)
269 int maxWaitingTimeMs;
270 // added samples in off mode due to packet loss
271 size_t addedSamples;
niklase@google.com470e71d2011-07-07 08:21:25 +0000272};
273
wu@webrtc.org24301a62013-12-13 19:17:43 +0000274// Statistics for calls to AudioCodingModule::PlayoutData10Ms().
275struct AudioDecodingCallStats {
276 AudioDecodingCallStats()
277 : calls_to_silence_generator(0),
278 calls_to_neteq(0),
279 decoded_normal(0),
280 decoded_plc(0),
281 decoded_cng(0),
henrik.lundin63489782016-09-20 01:47:12 -0700282 decoded_plc_cng(0),
283 decoded_muted_output(0) {}
wu@webrtc.org24301a62013-12-13 19:17:43 +0000284
285 int calls_to_silence_generator; // Number of calls where silence generated,
286 // and NetEq was disengaged from decoding.
solenberg634b86e2016-09-01 07:54:53 -0700287 int calls_to_neteq; // Number of calls to NetEq.
wu@webrtc.org24301a62013-12-13 19:17:43 +0000288 int decoded_normal; // Number of calls where audio RTP packet decoded.
solenberg634b86e2016-09-01 07:54:53 -0700289 int decoded_plc; // Number of calls resulted in PLC.
wu@webrtc.org24301a62013-12-13 19:17:43 +0000290 int decoded_cng; // Number of calls where comfort noise generated due to DTX.
Yves Gerey665174f2018-06-19 15:03:05 +0200291 int decoded_plc_cng; // Number of calls resulted where PLC faded to CNG.
henrik.lundin63489782016-09-20 01:47:12 -0700292 int decoded_muted_output; // Number of calls returning a muted state output.
wu@webrtc.org24301a62013-12-13 19:17:43 +0000293};
294
niklase@google.com470e71d2011-07-07 08:21:25 +0000295// ==================================================================
296// Video specific types
297// ==================================================================
298
nisseeb44b392017-04-28 07:18:05 -0700299// TODO(nisse): Delete, and switch to fourcc values everywhere?
300// Supported video types.
301enum class VideoType {
302 kUnknown,
303 kI420,
304 kIYUV,
305 kRGB24,
306 kABGR,
307 kARGB,
308 kARGB4444,
309 kRGB565,
310 kARGB1555,
311 kYUY2,
312 kYV12,
313 kUYVY,
314 kMJPEG,
315 kNV21,
316 kNV12,
317 kBGRA,
niklase@google.com470e71d2011-07-07 08:21:25 +0000318};
319
magjede69a1a92016-11-25 10:06:31 -0800320// TODO(magjed): Move this and other H264 related classes out to their own file.
321namespace H264 {
322
323enum Profile {
324 kProfileConstrainedBaseline,
325 kProfileBaseline,
326 kProfileMain,
327 kProfileConstrainedHigh,
328 kProfileHigh,
329};
330
331} // namespace H264
332
niklase@google.com470e71d2011-07-07 08:21:25 +0000333// Video codec types
marpan@webrtc.org5b883172014-11-01 06:10:48 +0000334enum VideoCodecType {
Niels Möller520ca4e2018-06-04 11:14:38 +0200335 // There are various memset(..., 0, ...) calls in the code that rely on
Kári Tristan Helgason84ccb2d2018-08-16 14:35:26 +0200336 // kVideoCodecGeneric being zero.
337 kVideoCodecGeneric = 0,
marpan@webrtc.org5b883172014-11-01 06:10:48 +0000338 kVideoCodecVP8,
339 kVideoCodecVP9,
340 kVideoCodecH264,
341 kVideoCodecI420,
Emircan Uysalerd7ae3c32018-01-25 13:01:09 -0800342 kVideoCodecMultiplex,
Kári Tristan Helgason84ccb2d2018-08-16 14:35:26 +0200343 // DEPRECATED. Do not use.
344 kVideoCodecUnknown,
Niels Möller520ca4e2018-06-04 11:14:38 +0200345
346 // TODO(nisse): Deprecated aliases, for code expecting RtpVideoCodecTypes.
Kári Tristan Helgason84ccb2d2018-08-16 14:35:26 +0200347 kRtpVideoNone = kVideoCodecGeneric,
Niels Möller520ca4e2018-06-04 11:14:38 +0200348 kRtpVideoGeneric = kVideoCodecGeneric,
349 kRtpVideoVp8 = kVideoCodecVP8,
350 kRtpVideoVp9 = kVideoCodecVP9,
351 kRtpVideoH264 = kVideoCodecH264,
niklase@google.com470e71d2011-07-07 08:21:25 +0000352};
353
Erik Språng08127a92016-11-16 16:41:30 +0100354// Translates from name of codec to codec type and vice versa.
kthelgason1cdddc92017-08-24 03:52:48 -0700355const char* CodecTypeToPayloadString(VideoCodecType type);
356VideoCodecType PayloadStringToCodecType(const std::string& name);
Erik Språng08127a92016-11-16 16:41:30 +0100357
Sergey Silkin13e74342018-03-02 12:28:00 +0100358struct SpatialLayer {
Niels Möllerdef1ef52018-03-19 13:48:44 +0100359 bool operator==(const SpatialLayer& other) const;
360 bool operator!=(const SpatialLayer& other) const { return !(*this == other); }
361
solenberg634b86e2016-09-01 07:54:53 -0700362 unsigned short width;
363 unsigned short height;
Sergey Silkin1946a3f2018-08-22 11:42:16 +0200364 float maxFramerate; // fps.
solenberg634b86e2016-09-01 07:54:53 -0700365 unsigned char numberOfTemporalLayers;
366 unsigned int maxBitrate; // kilobits/sec.
367 unsigned int targetBitrate; // kilobits/sec.
368 unsigned int minBitrate; // kilobits/sec.
369 unsigned int qpMax; // minimum quality
Seth Hampsonf6464c92018-01-17 13:55:14 -0800370 bool active; // encoded and sent.
pwestin@webrtc.org1da1ce02011-10-13 15:19:55 +0000371};
372
Sergey Silkin13e74342018-03-02 12:28:00 +0100373// Simulcast is when the same stream is encoded multiple times with different
374// settings such as resolution.
375typedef SpatialLayer SimulcastStream;
sprangce4aef12015-11-02 07:23:20 -0800376
Erik Språng566124a2018-04-23 12:32:22 +0200377// TODO(sprang): Remove this when downstream projects have been updated.
378using BitrateAllocation = VideoBitrateAllocation;
Erik Språng08127a92016-11-16 16:41:30 +0100379
stefan64c0a0a2015-11-27 01:02:31 -0800380// Bandwidth over-use detector options. These are used to drive
381// experimentation with bandwidth estimation parameters.
382// See modules/remote_bitrate_estimator/overuse_detector.h
terelius84f83f82016-12-27 10:43:01 -0800383// TODO(terelius): This is only used in overuse_estimator.cc, and only in the
384// default constructed state. Can we move the relevant variables into that
385// class and delete this? See also disabled warning at line 27
stefan64c0a0a2015-11-27 01:02:31 -0800386struct OverUseDetectorOptions {
387 OverUseDetectorOptions()
solenberg634b86e2016-09-01 07:54:53 -0700388 : initial_slope(8.0 / 512.0),
stefan64c0a0a2015-11-27 01:02:31 -0800389 initial_offset(0),
390 initial_e(),
391 initial_process_noise(),
392 initial_avg_noise(0.0),
393 initial_var_noise(50) {
394 initial_e[0][0] = 100;
395 initial_e[1][1] = 1e-1;
396 initial_e[0][1] = initial_e[1][0] = 0;
397 initial_process_noise[0] = 1e-13;
stefan1069cac2016-03-10 05:13:21 -0800398 initial_process_noise[1] = 1e-3;
stefan64c0a0a2015-11-27 01:02:31 -0800399 }
400 double initial_slope;
401 double initial_offset;
402 double initial_e[2][2];
403 double initial_process_noise[2];
404 double initial_avg_noise;
405 double initial_var_noise;
406};
407
isheriff6b4b5f32016-06-08 00:24:21 -0700408// Minimum and maximum playout delay values from capture to render.
409// These are best effort values.
410//
411// A value < 0 indicates no change from previous valid value.
412//
413// min = max = 0 indicates that the receiver should try and render
414// frame as soon as possible.
415//
416// min = x, max = y indicates that the receiver is free to adapt
417// in the range (x, y) based on network jitter.
418//
419// Note: Given that this gets embedded in a union, it is up-to the owner to
420// initialize these values.
421struct PlayoutDelay {
422 int min_ms;
423 int max_ms;
424};
425
niklase@google.com470e71d2011-07-07 08:21:25 +0000426} // namespace webrtc
andrew@webrtc.orgeda189b2013-09-09 17:50:10 +0000427
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200428#endif // COMMON_TYPES_H_