blob: 629de4e99ec83d1691d9c195943ba2ffaa9b718d [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
Erik Språng242e22b2015-05-11 10:17:43 +02002* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3*
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*/
niklase@google.com470e71d2011-07-07 08:21:25 +000010
11#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_UTILITY_H_
12#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_UTILITY_H_
13
pbos@webrtc.org12dc1a32013-08-05 16:22:53 +000014#include <stddef.h> // size_t, ptrdiff_t
niklase@google.com470e71d2011-07-07 08:21:25 +000015
kwiberg2c27a062016-04-26 08:37:53 -070016#include <memory>
17
Henrik Kjellanderff761fb2015-11-04 08:31:52 +010018#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
pbos@webrtc.orga048d7c2013-05-29 14:27:38 +000019#include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h"
20#include "webrtc/typedefs.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000021
22namespace webrtc {
Erik Språng6b8d3552015-09-24 15:06:57 +020023namespace rtcp {
24class RtcpPacket;
25}
niklase@google.com470e71d2011-07-07 08:21:25 +000026namespace RTCPUtility {
asapersson@webrtc.org2dd31342014-10-29 12:42:30 +000027
28class NackStats {
29 public:
30 NackStats();
31 ~NackStats();
32
33 // Updates stats with requested sequence number.
34 // This function should be called for each NACK request to calculate the
35 // number of unique NACKed RTP packets.
36 void ReportRequest(uint16_t sequence_number);
37
38 // Gets the number of NACKed RTP packets.
39 uint32_t requests() const { return requests_; }
40
41 // Gets the number of unique NACKed RTP packets.
42 uint32_t unique_requests() const { return unique_requests_; }
43
44 private:
45 uint16_t max_sequence_number_;
46 uint32_t requests_;
47 uint32_t unique_requests_;
48};
49
Erik Språng242e22b2015-05-11 10:17:43 +020050uint32_t MidNtp(uint32_t ntp_sec, uint32_t ntp_frac);
asapersson@webrtc.org8469f7b2013-10-02 13:15:34 +000051
Erik Språng242e22b2015-05-11 10:17:43 +020052// CNAME
53struct RTCPCnameInformation {
54 char name[RTCP_CNAME_SIZE];
55};
56struct RTCPPacketRR {
57 uint32_t SenderSSRC;
58 uint8_t NumberOfReportBlocks;
59};
60struct RTCPPacketSR {
61 uint32_t SenderSSRC;
62 uint8_t NumberOfReportBlocks;
niklase@google.com470e71d2011-07-07 08:21:25 +000063
Erik Språng242e22b2015-05-11 10:17:43 +020064 // sender info
65 uint32_t NTPMostSignificant;
66 uint32_t NTPLeastSignificant;
67 uint32_t RTPTimestamp;
68 uint32_t SenderPacketCount;
69 uint32_t SenderOctetCount;
70};
71struct RTCPPacketReportBlockItem {
72 // report block
73 uint32_t SSRC;
74 uint8_t FractionLost;
75 uint32_t CumulativeNumOfPacketsLost;
76 uint32_t ExtendedHighestSequenceNumber;
77 uint32_t Jitter;
78 uint32_t LastSR;
79 uint32_t DelayLastSR;
80};
81struct RTCPPacketSDESCName {
82 // RFC3550
83 uint32_t SenderSSRC;
84 char CName[RTCP_CNAME_SIZE];
85};
niklase@google.com470e71d2011-07-07 08:21:25 +000086
Erik Språng242e22b2015-05-11 10:17:43 +020087struct RTCPPacketExtendedJitterReportItem {
88 // RFC 5450
89 uint32_t Jitter;
90};
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +000091
Erik Språng242e22b2015-05-11 10:17:43 +020092struct RTCPPacketBYE {
93 uint32_t SenderSSRC;
94};
95struct RTCPPacketXR {
96 // RFC 3611
97 uint32_t OriginatorSSRC;
98};
99struct RTCPPacketXRReceiverReferenceTimeItem {
100 // RFC 3611 4.4
101 uint32_t NTPMostSignificant;
102 uint32_t NTPLeastSignificant;
103};
104struct RTCPPacketXRDLRRReportBlockItem {
105 // RFC 3611 4.5
106 uint32_t SSRC;
107 uint32_t LastRR;
108 uint32_t DelayLastRR;
109};
110struct RTCPPacketXRVOIPMetricItem {
111 // RFC 3611 4.7
112 uint32_t SSRC;
113 uint8_t lossRate;
114 uint8_t discardRate;
115 uint8_t burstDensity;
116 uint8_t gapDensity;
117 uint16_t burstDuration;
118 uint16_t gapDuration;
119 uint16_t roundTripDelay;
120 uint16_t endSystemDelay;
121 uint8_t signalLevel;
122 uint8_t noiseLevel;
123 uint8_t RERL;
124 uint8_t Gmin;
125 uint8_t Rfactor;
126 uint8_t extRfactor;
127 uint8_t MOSLQ;
128 uint8_t MOSCQ;
129 uint8_t RXconfig;
130 uint16_t JBnominal;
131 uint16_t JBmax;
132 uint16_t JBabsMax;
133};
niklase@google.com470e71d2011-07-07 08:21:25 +0000134
Erik Språng242e22b2015-05-11 10:17:43 +0200135struct RTCPPacketRTPFBNACK {
136 uint32_t SenderSSRC;
137 uint32_t MediaSSRC;
138};
139struct RTCPPacketRTPFBNACKItem {
140 // RFC4585
141 uint16_t PacketID;
142 uint16_t BitMask;
143};
niklase@google.com470e71d2011-07-07 08:21:25 +0000144
Erik Språng242e22b2015-05-11 10:17:43 +0200145struct RTCPPacketRTPFBTMMBR {
146 uint32_t SenderSSRC;
147 uint32_t MediaSSRC; // zero!
148};
149struct RTCPPacketRTPFBTMMBRItem {
150 // RFC5104
151 uint32_t SSRC;
152 uint32_t MaxTotalMediaBitRate; // In Kbit/s
153 uint32_t MeasuredOverhead;
154};
niklase@google.com470e71d2011-07-07 08:21:25 +0000155
Erik Språng242e22b2015-05-11 10:17:43 +0200156struct RTCPPacketRTPFBTMMBN {
157 uint32_t SenderSSRC;
158 uint32_t MediaSSRC; // zero!
159};
160struct RTCPPacketRTPFBTMMBNItem {
161 // RFC5104
162 uint32_t SSRC; // "Owner"
163 uint32_t MaxTotalMediaBitRate;
164 uint32_t MeasuredOverhead;
165};
niklase@google.com470e71d2011-07-07 08:21:25 +0000166
Erik Språng242e22b2015-05-11 10:17:43 +0200167struct RTCPPacketPSFBFIR {
168 uint32_t SenderSSRC;
169 uint32_t MediaSSRC; // zero!
170};
171struct RTCPPacketPSFBFIRItem {
172 // RFC5104
173 uint32_t SSRC;
174 uint8_t CommandSequenceNumber;
175};
niklase@google.com470e71d2011-07-07 08:21:25 +0000176
Erik Språng242e22b2015-05-11 10:17:43 +0200177struct RTCPPacketPSFBPLI {
178 // RFC4585
179 uint32_t SenderSSRC;
180 uint32_t MediaSSRC;
181};
niklase@google.com470e71d2011-07-07 08:21:25 +0000182
Erik Språng242e22b2015-05-11 10:17:43 +0200183struct RTCPPacketPSFBSLI {
184 // RFC4585
185 uint32_t SenderSSRC;
186 uint32_t MediaSSRC;
187};
188struct RTCPPacketPSFBSLIItem {
189 // RFC4585
190 uint16_t FirstMB;
191 uint16_t NumberOfMB;
192 uint8_t PictureId;
193};
194struct RTCPPacketPSFBRPSI {
195 // RFC4585
196 uint32_t SenderSSRC;
197 uint32_t MediaSSRC;
198 uint8_t PayloadType;
199 uint16_t NumberOfValidBits;
200 uint8_t NativeBitString[RTCP_RPSI_DATA_SIZE];
201};
202struct RTCPPacketPSFBAPP {
203 uint32_t SenderSSRC;
204 uint32_t MediaSSRC;
205};
206struct RTCPPacketPSFBREMBItem {
207 uint32_t BitRate;
208 uint8_t NumberOfSSRCs;
209 uint32_t SSRCs[MAX_NUMBER_OF_REMB_FEEDBACK_SSRCS];
210};
211// generic name APP
212struct RTCPPacketAPP {
213 uint8_t SubType;
214 uint32_t Name;
215 uint8_t Data[kRtcpAppCode_DATA_SIZE];
216 uint16_t Size;
217};
niklase@google.com470e71d2011-07-07 08:21:25 +0000218
Erik Språng242e22b2015-05-11 10:17:43 +0200219union RTCPPacket {
220 RTCPPacketRR RR;
221 RTCPPacketSR SR;
222 RTCPPacketReportBlockItem ReportBlockItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000223
Erik Språng242e22b2015-05-11 10:17:43 +0200224 RTCPPacketSDESCName CName;
225 RTCPPacketBYE BYE;
niklase@google.com470e71d2011-07-07 08:21:25 +0000226
Erik Språng242e22b2015-05-11 10:17:43 +0200227 RTCPPacketExtendedJitterReportItem ExtendedJitterReportItem;
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +0000228
Erik Språng242e22b2015-05-11 10:17:43 +0200229 RTCPPacketRTPFBNACK NACK;
230 RTCPPacketRTPFBNACKItem NACKItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000231
Erik Språng242e22b2015-05-11 10:17:43 +0200232 RTCPPacketPSFBPLI PLI;
233 RTCPPacketPSFBSLI SLI;
234 RTCPPacketPSFBSLIItem SLIItem;
235 RTCPPacketPSFBRPSI RPSI;
236 RTCPPacketPSFBAPP PSFBAPP;
237 RTCPPacketPSFBREMBItem REMBItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000238
Erik Språng242e22b2015-05-11 10:17:43 +0200239 RTCPPacketRTPFBTMMBR TMMBR;
240 RTCPPacketRTPFBTMMBRItem TMMBRItem;
241 RTCPPacketRTPFBTMMBN TMMBN;
242 RTCPPacketRTPFBTMMBNItem TMMBNItem;
243 RTCPPacketPSFBFIR FIR;
244 RTCPPacketPSFBFIRItem FIRItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000245
Erik Språng242e22b2015-05-11 10:17:43 +0200246 RTCPPacketXR XR;
247 RTCPPacketXRReceiverReferenceTimeItem XRReceiverReferenceTimeItem;
248 RTCPPacketXRDLRRReportBlockItem XRDLRRReportBlockItem;
249 RTCPPacketXRVOIPMetricItem XRVOIPMetricItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000250
Erik Språng242e22b2015-05-11 10:17:43 +0200251 RTCPPacketAPP APP;
252};
niklase@google.com470e71d2011-07-07 08:21:25 +0000253
Erik Språng242e22b2015-05-11 10:17:43 +0200254enum class RTCPPacketTypes {
255 kInvalid,
niklase@google.com470e71d2011-07-07 08:21:25 +0000256
Erik Språng242e22b2015-05-11 10:17:43 +0200257 // RFC3550
258 kRr,
259 kSr,
260 kReportBlockItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000261
Erik Språng242e22b2015-05-11 10:17:43 +0200262 kSdes,
263 kSdesChunk,
264 kBye,
niklase@google.com470e71d2011-07-07 08:21:25 +0000265
Erik Språng242e22b2015-05-11 10:17:43 +0200266 // RFC5450
267 kExtendedIj,
268 kExtendedIjItem,
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +0000269
Erik Språng242e22b2015-05-11 10:17:43 +0200270 // RFC4585
271 kRtpfbNack,
272 kRtpfbNackItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000273
Erik Språng242e22b2015-05-11 10:17:43 +0200274 kPsfbPli,
275 kPsfbRpsi,
danilchap90a13512016-04-11 10:05:02 -0700276 kPsfbRpsiItem,
Erik Språng242e22b2015-05-11 10:17:43 +0200277 kPsfbSli,
278 kPsfbSliItem,
279 kPsfbApp,
280 kPsfbRemb,
281 kPsfbRembItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000282
Erik Språng242e22b2015-05-11 10:17:43 +0200283 // RFC5104
284 kRtpfbTmmbr,
285 kRtpfbTmmbrItem,
286 kRtpfbTmmbn,
287 kRtpfbTmmbnItem,
288 kPsfbFir,
289 kPsfbFirItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000290
Erik Språng242e22b2015-05-11 10:17:43 +0200291 // draft-perkins-avt-rapid-rtp-sync
292 kRtpfbSrReq,
niklase@google.com470e71d2011-07-07 08:21:25 +0000293
Erik Språng242e22b2015-05-11 10:17:43 +0200294 // RFC 3611
295 kXrHeader,
296 kXrReceiverReferenceTime,
297 kXrDlrrReportBlock,
298 kXrDlrrReportBlockItem,
299 kXrVoipMetric,
niklase@google.com470e71d2011-07-07 08:21:25 +0000300
Erik Språng242e22b2015-05-11 10:17:43 +0200301 kApp,
302 kAppItem,
Erik Språng6b8d3552015-09-24 15:06:57 +0200303
304 // draft-holmer-rmcat-transport-wide-cc-extensions
305 kTransportFeedback,
Erik Språng242e22b2015-05-11 10:17:43 +0200306};
niklase@google.com470e71d2011-07-07 08:21:25 +0000307
Erik Språng242e22b2015-05-11 10:17:43 +0200308struct RTCPRawPacket {
309 const uint8_t* _ptrPacketBegin;
310 const uint8_t* _ptrPacketEnd;
311};
niklase@google.com470e71d2011-07-07 08:21:25 +0000312
Erik Språng242e22b2015-05-11 10:17:43 +0200313struct RTCPModRawPacket {
314 uint8_t* _ptrPacketBegin;
315 uint8_t* _ptrPacketEnd;
316};
niklase@google.com470e71d2011-07-07 08:21:25 +0000317
sprang73a93e82015-09-14 12:50:39 -0700318struct RtcpCommonHeader {
319 static const uint8_t kHeaderSizeBytes = 4;
320 RtcpCommonHeader()
321 : version(2),
322 count_or_format(0),
323 packet_type(0),
324 payload_size_bytes(0),
325 padding_bytes(0) {}
326
327 uint32_t BlockSize() const {
328 return kHeaderSizeBytes + payload_size_bytes + padding_bytes;
329 }
330
331 uint8_t version;
332 uint8_t count_or_format;
333 uint8_t packet_type;
334 uint32_t payload_size_bytes;
335 uint8_t padding_bytes;
Erik Språng242e22b2015-05-11 10:17:43 +0200336};
niklase@google.com470e71d2011-07-07 08:21:25 +0000337
Erik Språng242e22b2015-05-11 10:17:43 +0200338enum RTCPPT : uint8_t {
339 PT_IJ = 195,
340 PT_SR = 200,
341 PT_RR = 201,
342 PT_SDES = 202,
343 PT_BYE = 203,
344 PT_APP = 204,
345 PT_RTPFB = 205,
346 PT_PSFB = 206,
347 PT_XR = 207
348};
niklase@google.com470e71d2011-07-07 08:21:25 +0000349
Erik Språng242e22b2015-05-11 10:17:43 +0200350// Extended report blocks, RFC 3611.
351enum RtcpXrBlockType : uint8_t {
352 kBtReceiverReferenceTime = 4,
353 kBtDlrr = 5,
354 kBtVoipMetric = 7
355};
asapersson@webrtc.org38599512013-11-12 08:08:26 +0000356
sprang73a93e82015-09-14 12:50:39 -0700357bool RtcpParseCommonHeader(const uint8_t* buffer,
358 size_t size_bytes,
359 RtcpCommonHeader* parsed_header);
niklase@google.com470e71d2011-07-07 08:21:25 +0000360
Erik Språng242e22b2015-05-11 10:17:43 +0200361class RTCPParserV2 {
362 public:
363 RTCPParserV2(
364 const uint8_t* rtcpData,
365 size_t rtcpDataLength,
366 bool rtcpReducedSizeEnable); // Set to true, to allow non-compound RTCP!
367 ~RTCPParserV2();
niklase@google.com470e71d2011-07-07 08:21:25 +0000368
Erik Språng242e22b2015-05-11 10:17:43 +0200369 RTCPPacketTypes PacketType() const;
370 const RTCPPacket& Packet() const;
Erik Språng6b8d3552015-09-24 15:06:57 +0200371 rtcp::RtcpPacket* ReleaseRtcpPacket();
Erik Språng242e22b2015-05-11 10:17:43 +0200372 const RTCPRawPacket& RawPacket() const;
373 ptrdiff_t LengthLeft() const;
niklase@google.com470e71d2011-07-07 08:21:25 +0000374
Erik Språng242e22b2015-05-11 10:17:43 +0200375 bool IsValid() const;
Erik Språng6b8d3552015-09-24 15:06:57 +0200376 size_t NumSkippedBlocks() const;
niklase@google.com470e71d2011-07-07 08:21:25 +0000377
Erik Språng242e22b2015-05-11 10:17:43 +0200378 RTCPPacketTypes Begin();
379 RTCPPacketTypes Iterate();
niklase@google.com470e71d2011-07-07 08:21:25 +0000380
Erik Språng242e22b2015-05-11 10:17:43 +0200381 private:
382 enum class ParseState {
383 State_TopLevel, // Top level packet
384 State_ReportBlockItem, // SR/RR report block
385 State_SDESChunk, // SDES chunk
386 State_BYEItem, // BYE item
387 State_ExtendedJitterItem, // Extended jitter report item
388 State_RTPFB_NACKItem, // NACK FCI item
389 State_RTPFB_TMMBRItem, // TMMBR FCI item
390 State_RTPFB_TMMBNItem, // TMMBN FCI item
391 State_PSFB_SLIItem, // SLI FCI item
392 State_PSFB_RPSIItem, // RPSI FCI item
393 State_PSFB_FIRItem, // FIR FCI item
394 State_PSFB_AppItem, // Application specific FCI item
395 State_PSFB_REMBItem, // Application specific REMB item
396 State_XRItem,
397 State_XR_DLLRItem,
398 State_AppItem
399 };
niklase@google.com470e71d2011-07-07 08:21:25 +0000400
Erik Språng242e22b2015-05-11 10:17:43 +0200401 private:
402 void IterateTopLevel();
403 void IterateReportBlockItem();
404 void IterateSDESChunk();
405 void IterateBYEItem();
406 void IterateExtendedJitterItem();
407 void IterateNACKItem();
408 void IterateTMMBRItem();
409 void IterateTMMBNItem();
410 void IterateSLIItem();
411 void IterateRPSIItem();
412 void IterateFIRItem();
413 void IteratePsfbAppItem();
414 void IteratePsfbREMBItem();
415 void IterateAppItem();
416 void IterateXrItem();
417 void IterateXrDlrrItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000418
Erik Språng242e22b2015-05-11 10:17:43 +0200419 void Validate();
420 void EndCurrentBlock();
niklase@google.com470e71d2011-07-07 08:21:25 +0000421
Erik Språng242e22b2015-05-11 10:17:43 +0200422 bool ParseRR();
423 bool ParseSR();
424 bool ParseReportBlockItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000425
Erik Språng242e22b2015-05-11 10:17:43 +0200426 bool ParseSDES();
427 bool ParseSDESChunk();
428 bool ParseSDESItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000429
Erik Språng242e22b2015-05-11 10:17:43 +0200430 bool ParseBYE();
431 bool ParseBYEItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000432
Erik Språng242e22b2015-05-11 10:17:43 +0200433 bool ParseIJ();
434 bool ParseIJItem();
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +0000435
Erik Språng242e22b2015-05-11 10:17:43 +0200436 bool ParseXr();
437 bool ParseXrItem();
438 bool ParseXrReceiverReferenceTimeItem(int block_length_4bytes);
439 bool ParseXrDlrr(int block_length_4bytes);
440 bool ParseXrDlrrItem();
441 bool ParseXrVoipMetricItem(int block_length_4bytes);
442 bool ParseXrUnsupportedBlockType(int block_length_4bytes);
niklase@google.com470e71d2011-07-07 08:21:25 +0000443
sprang73a93e82015-09-14 12:50:39 -0700444 bool ParseFBCommon(const RtcpCommonHeader& header);
Erik Språng242e22b2015-05-11 10:17:43 +0200445 bool ParseNACKItem();
446 bool ParseTMMBRItem();
447 bool ParseTMMBNItem();
448 bool ParseSLIItem();
449 bool ParseRPSIItem();
450 bool ParseFIRItem();
451 bool ParsePsfbAppItem();
452 bool ParsePsfbREMBItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000453
sprang73a93e82015-09-14 12:50:39 -0700454 bool ParseAPP(const RtcpCommonHeader& header);
Erik Språng242e22b2015-05-11 10:17:43 +0200455 bool ParseAPPItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000456
Erik Språng242e22b2015-05-11 10:17:43 +0200457 private:
458 const uint8_t* const _ptrRTCPDataBegin;
459 const bool _RTCPReducedSizeEnable;
460 const uint8_t* const _ptrRTCPDataEnd;
niklase@google.com470e71d2011-07-07 08:21:25 +0000461
Erik Språng242e22b2015-05-11 10:17:43 +0200462 bool _validPacket;
463 const uint8_t* _ptrRTCPData;
464 const uint8_t* _ptrRTCPBlockEnd;
niklase@google.com470e71d2011-07-07 08:21:25 +0000465
Erik Språng242e22b2015-05-11 10:17:43 +0200466 ParseState _state;
467 uint8_t _numberOfBlocks;
Erik Språng6b8d3552015-09-24 15:06:57 +0200468 size_t num_skipped_blocks_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000469
Erik Språng242e22b2015-05-11 10:17:43 +0200470 RTCPPacketTypes _packetType;
471 RTCPPacket _packet;
kwiberg2c27a062016-04-26 08:37:53 -0700472 std::unique_ptr<webrtc::rtcp::RtcpPacket> rtcp_packet_;
Erik Språng242e22b2015-05-11 10:17:43 +0200473};
niklase@google.com470e71d2011-07-07 08:21:25 +0000474
Erik Språng242e22b2015-05-11 10:17:43 +0200475class RTCPPacketIterator {
476 public:
477 RTCPPacketIterator(uint8_t* rtcpData, size_t rtcpDataLength);
478 ~RTCPPacketIterator();
niklase@google.com470e71d2011-07-07 08:21:25 +0000479
sprang73a93e82015-09-14 12:50:39 -0700480 const RtcpCommonHeader* Begin();
481 const RtcpCommonHeader* Iterate();
482 const RtcpCommonHeader* Current();
niklase@google.com470e71d2011-07-07 08:21:25 +0000483
Erik Språng242e22b2015-05-11 10:17:43 +0200484 private:
485 uint8_t* const _ptrBegin;
486 uint8_t* const _ptrEnd;
niklase@google.com470e71d2011-07-07 08:21:25 +0000487
Erik Språng242e22b2015-05-11 10:17:43 +0200488 uint8_t* _ptrBlock;
niklase@google.com470e71d2011-07-07 08:21:25 +0000489
sprang73a93e82015-09-14 12:50:39 -0700490 RtcpCommonHeader _header;
Erik Språng242e22b2015-05-11 10:17:43 +0200491};
danilchap6a6f0892015-12-10 12:39:08 -0800492} // namespace RTCPUtility
pbos@webrtc.orgd900e8b2013-07-03 15:12:26 +0000493} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000494#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_UTILITY_H_