blob: 4067a40886f435201d11ad6379f88d523fb36063 [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
Erik Språng6b8d3552015-09-24 15:06:57 +020016#include "webrtc/base/scoped_ptr.h"
Henrik Kjellanderff761fb2015-11-04 08:31:52 +010017#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
pbos@webrtc.orga048d7c2013-05-29 14:27:38 +000018#include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h"
19#include "webrtc/typedefs.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000020
21namespace webrtc {
Erik Språng6b8d3552015-09-24 15:06:57 +020022namespace rtcp {
23class RtcpPacket;
24}
niklase@google.com470e71d2011-07-07 08:21:25 +000025namespace RTCPUtility {
asapersson@webrtc.org2dd31342014-10-29 12:42:30 +000026
27class NackStats {
28 public:
29 NackStats();
30 ~NackStats();
31
32 // Updates stats with requested sequence number.
33 // This function should be called for each NACK request to calculate the
34 // number of unique NACKed RTP packets.
35 void ReportRequest(uint16_t sequence_number);
36
37 // Gets the number of NACKed RTP packets.
38 uint32_t requests() const { return requests_; }
39
40 // Gets the number of unique NACKed RTP packets.
41 uint32_t unique_requests() const { return unique_requests_; }
42
43 private:
44 uint16_t max_sequence_number_;
45 uint32_t requests_;
46 uint32_t unique_requests_;
47};
48
Erik Språng242e22b2015-05-11 10:17:43 +020049uint32_t MidNtp(uint32_t ntp_sec, uint32_t ntp_frac);
asapersson@webrtc.org8469f7b2013-10-02 13:15:34 +000050
Erik Språng242e22b2015-05-11 10:17:43 +020051// CNAME
52struct RTCPCnameInformation {
53 char name[RTCP_CNAME_SIZE];
54};
55struct RTCPPacketRR {
56 uint32_t SenderSSRC;
57 uint8_t NumberOfReportBlocks;
58};
59struct RTCPPacketSR {
60 uint32_t SenderSSRC;
61 uint8_t NumberOfReportBlocks;
niklase@google.com470e71d2011-07-07 08:21:25 +000062
Erik Språng242e22b2015-05-11 10:17:43 +020063 // sender info
64 uint32_t NTPMostSignificant;
65 uint32_t NTPLeastSignificant;
66 uint32_t RTPTimestamp;
67 uint32_t SenderPacketCount;
68 uint32_t SenderOctetCount;
69};
70struct RTCPPacketReportBlockItem {
71 // report block
72 uint32_t SSRC;
73 uint8_t FractionLost;
74 uint32_t CumulativeNumOfPacketsLost;
75 uint32_t ExtendedHighestSequenceNumber;
76 uint32_t Jitter;
77 uint32_t LastSR;
78 uint32_t DelayLastSR;
79};
80struct RTCPPacketSDESCName {
81 // RFC3550
82 uint32_t SenderSSRC;
83 char CName[RTCP_CNAME_SIZE];
84};
niklase@google.com470e71d2011-07-07 08:21:25 +000085
Erik Språng242e22b2015-05-11 10:17:43 +020086struct RTCPPacketExtendedJitterReportItem {
87 // RFC 5450
88 uint32_t Jitter;
89};
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +000090
Erik Språng242e22b2015-05-11 10:17:43 +020091struct RTCPPacketBYE {
92 uint32_t SenderSSRC;
93};
94struct RTCPPacketXR {
95 // RFC 3611
96 uint32_t OriginatorSSRC;
97};
98struct RTCPPacketXRReceiverReferenceTimeItem {
99 // RFC 3611 4.4
100 uint32_t NTPMostSignificant;
101 uint32_t NTPLeastSignificant;
102};
103struct RTCPPacketXRDLRRReportBlockItem {
104 // RFC 3611 4.5
105 uint32_t SSRC;
106 uint32_t LastRR;
107 uint32_t DelayLastRR;
108};
109struct RTCPPacketXRVOIPMetricItem {
110 // RFC 3611 4.7
111 uint32_t SSRC;
112 uint8_t lossRate;
113 uint8_t discardRate;
114 uint8_t burstDensity;
115 uint8_t gapDensity;
116 uint16_t burstDuration;
117 uint16_t gapDuration;
118 uint16_t roundTripDelay;
119 uint16_t endSystemDelay;
120 uint8_t signalLevel;
121 uint8_t noiseLevel;
122 uint8_t RERL;
123 uint8_t Gmin;
124 uint8_t Rfactor;
125 uint8_t extRfactor;
126 uint8_t MOSLQ;
127 uint8_t MOSCQ;
128 uint8_t RXconfig;
129 uint16_t JBnominal;
130 uint16_t JBmax;
131 uint16_t JBabsMax;
132};
niklase@google.com470e71d2011-07-07 08:21:25 +0000133
Erik Språng242e22b2015-05-11 10:17:43 +0200134struct RTCPPacketRTPFBNACK {
135 uint32_t SenderSSRC;
136 uint32_t MediaSSRC;
137};
138struct RTCPPacketRTPFBNACKItem {
139 // RFC4585
140 uint16_t PacketID;
141 uint16_t BitMask;
142};
niklase@google.com470e71d2011-07-07 08:21:25 +0000143
Erik Språng242e22b2015-05-11 10:17:43 +0200144struct RTCPPacketRTPFBTMMBR {
145 uint32_t SenderSSRC;
146 uint32_t MediaSSRC; // zero!
147};
148struct RTCPPacketRTPFBTMMBRItem {
149 // RFC5104
150 uint32_t SSRC;
151 uint32_t MaxTotalMediaBitRate; // In Kbit/s
152 uint32_t MeasuredOverhead;
153};
niklase@google.com470e71d2011-07-07 08:21:25 +0000154
Erik Språng242e22b2015-05-11 10:17:43 +0200155struct RTCPPacketRTPFBTMMBN {
156 uint32_t SenderSSRC;
157 uint32_t MediaSSRC; // zero!
158};
159struct RTCPPacketRTPFBTMMBNItem {
160 // RFC5104
161 uint32_t SSRC; // "Owner"
162 uint32_t MaxTotalMediaBitRate;
163 uint32_t MeasuredOverhead;
164};
niklase@google.com470e71d2011-07-07 08:21:25 +0000165
Erik Språng242e22b2015-05-11 10:17:43 +0200166struct RTCPPacketPSFBFIR {
167 uint32_t SenderSSRC;
168 uint32_t MediaSSRC; // zero!
169};
170struct RTCPPacketPSFBFIRItem {
171 // RFC5104
172 uint32_t SSRC;
173 uint8_t CommandSequenceNumber;
174};
niklase@google.com470e71d2011-07-07 08:21:25 +0000175
Erik Språng242e22b2015-05-11 10:17:43 +0200176struct RTCPPacketPSFBPLI {
177 // RFC4585
178 uint32_t SenderSSRC;
179 uint32_t MediaSSRC;
180};
niklase@google.com470e71d2011-07-07 08:21:25 +0000181
Erik Språng242e22b2015-05-11 10:17:43 +0200182struct RTCPPacketPSFBSLI {
183 // RFC4585
184 uint32_t SenderSSRC;
185 uint32_t MediaSSRC;
186};
187struct RTCPPacketPSFBSLIItem {
188 // RFC4585
189 uint16_t FirstMB;
190 uint16_t NumberOfMB;
191 uint8_t PictureId;
192};
193struct RTCPPacketPSFBRPSI {
194 // RFC4585
195 uint32_t SenderSSRC;
196 uint32_t MediaSSRC;
197 uint8_t PayloadType;
198 uint16_t NumberOfValidBits;
199 uint8_t NativeBitString[RTCP_RPSI_DATA_SIZE];
200};
201struct RTCPPacketPSFBAPP {
202 uint32_t SenderSSRC;
203 uint32_t MediaSSRC;
204};
205struct RTCPPacketPSFBREMBItem {
206 uint32_t BitRate;
207 uint8_t NumberOfSSRCs;
208 uint32_t SSRCs[MAX_NUMBER_OF_REMB_FEEDBACK_SSRCS];
209};
210// generic name APP
211struct RTCPPacketAPP {
212 uint8_t SubType;
213 uint32_t Name;
214 uint8_t Data[kRtcpAppCode_DATA_SIZE];
215 uint16_t Size;
216};
niklase@google.com470e71d2011-07-07 08:21:25 +0000217
Erik Språng242e22b2015-05-11 10:17:43 +0200218union RTCPPacket {
219 RTCPPacketRR RR;
220 RTCPPacketSR SR;
221 RTCPPacketReportBlockItem ReportBlockItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000222
Erik Språng242e22b2015-05-11 10:17:43 +0200223 RTCPPacketSDESCName CName;
224 RTCPPacketBYE BYE;
niklase@google.com470e71d2011-07-07 08:21:25 +0000225
Erik Språng242e22b2015-05-11 10:17:43 +0200226 RTCPPacketExtendedJitterReportItem ExtendedJitterReportItem;
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +0000227
Erik Språng242e22b2015-05-11 10:17:43 +0200228 RTCPPacketRTPFBNACK NACK;
229 RTCPPacketRTPFBNACKItem NACKItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000230
Erik Språng242e22b2015-05-11 10:17:43 +0200231 RTCPPacketPSFBPLI PLI;
232 RTCPPacketPSFBSLI SLI;
233 RTCPPacketPSFBSLIItem SLIItem;
234 RTCPPacketPSFBRPSI RPSI;
235 RTCPPacketPSFBAPP PSFBAPP;
236 RTCPPacketPSFBREMBItem REMBItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000237
Erik Språng242e22b2015-05-11 10:17:43 +0200238 RTCPPacketRTPFBTMMBR TMMBR;
239 RTCPPacketRTPFBTMMBRItem TMMBRItem;
240 RTCPPacketRTPFBTMMBN TMMBN;
241 RTCPPacketRTPFBTMMBNItem TMMBNItem;
242 RTCPPacketPSFBFIR FIR;
243 RTCPPacketPSFBFIRItem FIRItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000244
Erik Språng242e22b2015-05-11 10:17:43 +0200245 RTCPPacketXR XR;
246 RTCPPacketXRReceiverReferenceTimeItem XRReceiverReferenceTimeItem;
247 RTCPPacketXRDLRRReportBlockItem XRDLRRReportBlockItem;
248 RTCPPacketXRVOIPMetricItem XRVOIPMetricItem;
niklase@google.com470e71d2011-07-07 08:21:25 +0000249
Erik Språng242e22b2015-05-11 10:17:43 +0200250 RTCPPacketAPP APP;
251};
niklase@google.com470e71d2011-07-07 08:21:25 +0000252
Erik Språng242e22b2015-05-11 10:17:43 +0200253enum class RTCPPacketTypes {
254 kInvalid,
niklase@google.com470e71d2011-07-07 08:21:25 +0000255
Erik Språng242e22b2015-05-11 10:17:43 +0200256 // RFC3550
257 kRr,
258 kSr,
259 kReportBlockItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000260
Erik Språng242e22b2015-05-11 10:17:43 +0200261 kSdes,
262 kSdesChunk,
263 kBye,
niklase@google.com470e71d2011-07-07 08:21:25 +0000264
Erik Språng242e22b2015-05-11 10:17:43 +0200265 // RFC5450
266 kExtendedIj,
267 kExtendedIjItem,
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +0000268
Erik Språng242e22b2015-05-11 10:17:43 +0200269 // RFC4585
270 kRtpfbNack,
271 kRtpfbNackItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000272
Erik Språng242e22b2015-05-11 10:17:43 +0200273 kPsfbPli,
274 kPsfbRpsi,
danilchap90a13512016-04-11 10:05:02 -0700275 kPsfbRpsiItem,
Erik Språng242e22b2015-05-11 10:17:43 +0200276 kPsfbSli,
277 kPsfbSliItem,
278 kPsfbApp,
279 kPsfbRemb,
280 kPsfbRembItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000281
Erik Språng242e22b2015-05-11 10:17:43 +0200282 // RFC5104
283 kRtpfbTmmbr,
284 kRtpfbTmmbrItem,
285 kRtpfbTmmbn,
286 kRtpfbTmmbnItem,
287 kPsfbFir,
288 kPsfbFirItem,
niklase@google.com470e71d2011-07-07 08:21:25 +0000289
Erik Språng242e22b2015-05-11 10:17:43 +0200290 // draft-perkins-avt-rapid-rtp-sync
291 kRtpfbSrReq,
niklase@google.com470e71d2011-07-07 08:21:25 +0000292
Erik Språng242e22b2015-05-11 10:17:43 +0200293 // RFC 3611
294 kXrHeader,
295 kXrReceiverReferenceTime,
296 kXrDlrrReportBlock,
297 kXrDlrrReportBlockItem,
298 kXrVoipMetric,
niklase@google.com470e71d2011-07-07 08:21:25 +0000299
Erik Språng242e22b2015-05-11 10:17:43 +0200300 kApp,
301 kAppItem,
Erik Språng6b8d3552015-09-24 15:06:57 +0200302
303 // draft-holmer-rmcat-transport-wide-cc-extensions
304 kTransportFeedback,
Erik Språng242e22b2015-05-11 10:17:43 +0200305};
niklase@google.com470e71d2011-07-07 08:21:25 +0000306
Erik Språng242e22b2015-05-11 10:17:43 +0200307struct RTCPRawPacket {
308 const uint8_t* _ptrPacketBegin;
309 const uint8_t* _ptrPacketEnd;
310};
niklase@google.com470e71d2011-07-07 08:21:25 +0000311
Erik Språng242e22b2015-05-11 10:17:43 +0200312struct RTCPModRawPacket {
313 uint8_t* _ptrPacketBegin;
314 uint8_t* _ptrPacketEnd;
315};
niklase@google.com470e71d2011-07-07 08:21:25 +0000316
sprang73a93e82015-09-14 12:50:39 -0700317struct RtcpCommonHeader {
318 static const uint8_t kHeaderSizeBytes = 4;
319 RtcpCommonHeader()
320 : version(2),
321 count_or_format(0),
322 packet_type(0),
323 payload_size_bytes(0),
324 padding_bytes(0) {}
325
326 uint32_t BlockSize() const {
327 return kHeaderSizeBytes + payload_size_bytes + padding_bytes;
328 }
329
330 uint8_t version;
331 uint8_t count_or_format;
332 uint8_t packet_type;
333 uint32_t payload_size_bytes;
334 uint8_t padding_bytes;
Erik Språng242e22b2015-05-11 10:17:43 +0200335};
niklase@google.com470e71d2011-07-07 08:21:25 +0000336
Erik Språng242e22b2015-05-11 10:17:43 +0200337enum RTCPPT : uint8_t {
338 PT_IJ = 195,
339 PT_SR = 200,
340 PT_RR = 201,
341 PT_SDES = 202,
342 PT_BYE = 203,
343 PT_APP = 204,
344 PT_RTPFB = 205,
345 PT_PSFB = 206,
346 PT_XR = 207
347};
niklase@google.com470e71d2011-07-07 08:21:25 +0000348
Erik Språng242e22b2015-05-11 10:17:43 +0200349// Extended report blocks, RFC 3611.
350enum RtcpXrBlockType : uint8_t {
351 kBtReceiverReferenceTime = 4,
352 kBtDlrr = 5,
353 kBtVoipMetric = 7
354};
asapersson@webrtc.org38599512013-11-12 08:08:26 +0000355
sprang73a93e82015-09-14 12:50:39 -0700356bool RtcpParseCommonHeader(const uint8_t* buffer,
357 size_t size_bytes,
358 RtcpCommonHeader* parsed_header);
niklase@google.com470e71d2011-07-07 08:21:25 +0000359
Erik Språng242e22b2015-05-11 10:17:43 +0200360class RTCPParserV2 {
361 public:
362 RTCPParserV2(
363 const uint8_t* rtcpData,
364 size_t rtcpDataLength,
365 bool rtcpReducedSizeEnable); // Set to true, to allow non-compound RTCP!
366 ~RTCPParserV2();
niklase@google.com470e71d2011-07-07 08:21:25 +0000367
Erik Språng242e22b2015-05-11 10:17:43 +0200368 RTCPPacketTypes PacketType() const;
369 const RTCPPacket& Packet() const;
Erik Språng6b8d3552015-09-24 15:06:57 +0200370 rtcp::RtcpPacket* ReleaseRtcpPacket();
Erik Språng242e22b2015-05-11 10:17:43 +0200371 const RTCPRawPacket& RawPacket() const;
372 ptrdiff_t LengthLeft() const;
niklase@google.com470e71d2011-07-07 08:21:25 +0000373
Erik Språng242e22b2015-05-11 10:17:43 +0200374 bool IsValid() const;
Erik Språng6b8d3552015-09-24 15:06:57 +0200375 size_t NumSkippedBlocks() const;
niklase@google.com470e71d2011-07-07 08:21:25 +0000376
Erik Språng242e22b2015-05-11 10:17:43 +0200377 RTCPPacketTypes Begin();
378 RTCPPacketTypes Iterate();
niklase@google.com470e71d2011-07-07 08:21:25 +0000379
Erik Språng242e22b2015-05-11 10:17:43 +0200380 private:
381 enum class ParseState {
382 State_TopLevel, // Top level packet
383 State_ReportBlockItem, // SR/RR report block
384 State_SDESChunk, // SDES chunk
385 State_BYEItem, // BYE item
386 State_ExtendedJitterItem, // Extended jitter report item
387 State_RTPFB_NACKItem, // NACK FCI item
388 State_RTPFB_TMMBRItem, // TMMBR FCI item
389 State_RTPFB_TMMBNItem, // TMMBN FCI item
390 State_PSFB_SLIItem, // SLI FCI item
391 State_PSFB_RPSIItem, // RPSI FCI item
392 State_PSFB_FIRItem, // FIR FCI item
393 State_PSFB_AppItem, // Application specific FCI item
394 State_PSFB_REMBItem, // Application specific REMB item
395 State_XRItem,
396 State_XR_DLLRItem,
397 State_AppItem
398 };
niklase@google.com470e71d2011-07-07 08:21:25 +0000399
Erik Språng242e22b2015-05-11 10:17:43 +0200400 private:
401 void IterateTopLevel();
402 void IterateReportBlockItem();
403 void IterateSDESChunk();
404 void IterateBYEItem();
405 void IterateExtendedJitterItem();
406 void IterateNACKItem();
407 void IterateTMMBRItem();
408 void IterateTMMBNItem();
409 void IterateSLIItem();
410 void IterateRPSIItem();
411 void IterateFIRItem();
412 void IteratePsfbAppItem();
413 void IteratePsfbREMBItem();
414 void IterateAppItem();
415 void IterateXrItem();
416 void IterateXrDlrrItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000417
Erik Språng242e22b2015-05-11 10:17:43 +0200418 void Validate();
419 void EndCurrentBlock();
niklase@google.com470e71d2011-07-07 08:21:25 +0000420
Erik Språng242e22b2015-05-11 10:17:43 +0200421 bool ParseRR();
422 bool ParseSR();
423 bool ParseReportBlockItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000424
Erik Språng242e22b2015-05-11 10:17:43 +0200425 bool ParseSDES();
426 bool ParseSDESChunk();
427 bool ParseSDESItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000428
Erik Språng242e22b2015-05-11 10:17:43 +0200429 bool ParseBYE();
430 bool ParseBYEItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000431
Erik Språng242e22b2015-05-11 10:17:43 +0200432 bool ParseIJ();
433 bool ParseIJItem();
asapersson@webrtc.org5249cc82011-12-16 14:31:37 +0000434
Erik Språng242e22b2015-05-11 10:17:43 +0200435 bool ParseXr();
436 bool ParseXrItem();
437 bool ParseXrReceiverReferenceTimeItem(int block_length_4bytes);
438 bool ParseXrDlrr(int block_length_4bytes);
439 bool ParseXrDlrrItem();
440 bool ParseXrVoipMetricItem(int block_length_4bytes);
441 bool ParseXrUnsupportedBlockType(int block_length_4bytes);
niklase@google.com470e71d2011-07-07 08:21:25 +0000442
sprang73a93e82015-09-14 12:50:39 -0700443 bool ParseFBCommon(const RtcpCommonHeader& header);
Erik Språng242e22b2015-05-11 10:17:43 +0200444 bool ParseNACKItem();
445 bool ParseTMMBRItem();
446 bool ParseTMMBNItem();
447 bool ParseSLIItem();
448 bool ParseRPSIItem();
449 bool ParseFIRItem();
450 bool ParsePsfbAppItem();
451 bool ParsePsfbREMBItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000452
sprang73a93e82015-09-14 12:50:39 -0700453 bool ParseAPP(const RtcpCommonHeader& header);
Erik Språng242e22b2015-05-11 10:17:43 +0200454 bool ParseAPPItem();
niklase@google.com470e71d2011-07-07 08:21:25 +0000455
Erik Språng242e22b2015-05-11 10:17:43 +0200456 private:
457 const uint8_t* const _ptrRTCPDataBegin;
458 const bool _RTCPReducedSizeEnable;
459 const uint8_t* const _ptrRTCPDataEnd;
niklase@google.com470e71d2011-07-07 08:21:25 +0000460
Erik Språng242e22b2015-05-11 10:17:43 +0200461 bool _validPacket;
462 const uint8_t* _ptrRTCPData;
463 const uint8_t* _ptrRTCPBlockEnd;
niklase@google.com470e71d2011-07-07 08:21:25 +0000464
Erik Språng242e22b2015-05-11 10:17:43 +0200465 ParseState _state;
466 uint8_t _numberOfBlocks;
Erik Språng6b8d3552015-09-24 15:06:57 +0200467 size_t num_skipped_blocks_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000468
Erik Språng242e22b2015-05-11 10:17:43 +0200469 RTCPPacketTypes _packetType;
470 RTCPPacket _packet;
Erik Språng6b8d3552015-09-24 15:06:57 +0200471 rtc::scoped_ptr<webrtc::rtcp::RtcpPacket> rtcp_packet_;
Erik Språng242e22b2015-05-11 10:17:43 +0200472};
niklase@google.com470e71d2011-07-07 08:21:25 +0000473
Erik Språng242e22b2015-05-11 10:17:43 +0200474class RTCPPacketIterator {
475 public:
476 RTCPPacketIterator(uint8_t* rtcpData, size_t rtcpDataLength);
477 ~RTCPPacketIterator();
niklase@google.com470e71d2011-07-07 08:21:25 +0000478
sprang73a93e82015-09-14 12:50:39 -0700479 const RtcpCommonHeader* Begin();
480 const RtcpCommonHeader* Iterate();
481 const RtcpCommonHeader* Current();
niklase@google.com470e71d2011-07-07 08:21:25 +0000482
Erik Språng242e22b2015-05-11 10:17:43 +0200483 private:
484 uint8_t* const _ptrBegin;
485 uint8_t* const _ptrEnd;
niklase@google.com470e71d2011-07-07 08:21:25 +0000486
Erik Språng242e22b2015-05-11 10:17:43 +0200487 uint8_t* _ptrBlock;
niklase@google.com470e71d2011-07-07 08:21:25 +0000488
sprang73a93e82015-09-14 12:50:39 -0700489 RtcpCommonHeader _header;
Erik Språng242e22b2015-05-11 10:17:43 +0200490};
danilchap6a6f0892015-12-10 12:39:08 -0800491} // namespace RTCPUtility
pbos@webrtc.orgd900e8b2013-07-03 15:12:26 +0000492} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000493#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_UTILITY_H_