OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 struct RTCPRawPacket { | 299 struct RTCPRawPacket { |
300 const uint8_t* _ptrPacketBegin; | 300 const uint8_t* _ptrPacketBegin; |
301 const uint8_t* _ptrPacketEnd; | 301 const uint8_t* _ptrPacketEnd; |
302 }; | 302 }; |
303 | 303 |
304 struct RTCPModRawPacket { | 304 struct RTCPModRawPacket { |
305 uint8_t* _ptrPacketBegin; | 305 uint8_t* _ptrPacketBegin; |
306 uint8_t* _ptrPacketEnd; | 306 uint8_t* _ptrPacketEnd; |
307 }; | 307 }; |
308 | 308 |
309 struct RTCPCommonHeader { | 309 struct RtcpCommonHeader { |
310 uint8_t V; // Version | 310 static const uint8_t kHeaderSizeBytes = 4; |
311 bool P; // Padding | 311 RtcpCommonHeader() |
312 uint8_t IC; // Item count/subtype | 312 : version(2), |
313 uint8_t PT; // Packet Type | 313 count_or_format(0), |
314 uint16_t LengthInOctets; | 314 packet_type(0), |
| 315 payload_size_bytes(0), |
| 316 padding_bytes(0) {} |
| 317 |
| 318 uint32_t BlockSize() const { |
| 319 return kHeaderSizeBytes + payload_size_bytes + padding_bytes; |
| 320 } |
| 321 |
| 322 uint8_t version; |
| 323 uint8_t count_or_format; |
| 324 uint8_t packet_type; |
| 325 uint32_t payload_size_bytes; |
| 326 uint8_t padding_bytes; |
315 }; | 327 }; |
316 | 328 |
317 enum RTCPPT : uint8_t { | 329 enum RTCPPT : uint8_t { |
318 PT_IJ = 195, | 330 PT_IJ = 195, |
319 PT_SR = 200, | 331 PT_SR = 200, |
320 PT_RR = 201, | 332 PT_RR = 201, |
321 PT_SDES = 202, | 333 PT_SDES = 202, |
322 PT_BYE = 203, | 334 PT_BYE = 203, |
323 PT_APP = 204, | 335 PT_APP = 204, |
324 PT_RTPFB = 205, | 336 PT_RTPFB = 205, |
325 PT_PSFB = 206, | 337 PT_PSFB = 206, |
326 PT_XR = 207 | 338 PT_XR = 207 |
327 }; | 339 }; |
328 | 340 |
329 // Extended report blocks, RFC 3611. | 341 // Extended report blocks, RFC 3611. |
330 enum RtcpXrBlockType : uint8_t { | 342 enum RtcpXrBlockType : uint8_t { |
331 kBtReceiverReferenceTime = 4, | 343 kBtReceiverReferenceTime = 4, |
332 kBtDlrr = 5, | 344 kBtDlrr = 5, |
333 kBtVoipMetric = 7 | 345 kBtVoipMetric = 7 |
334 }; | 346 }; |
335 | 347 |
336 bool RTCPParseCommonHeader(const uint8_t* ptrDataBegin, | 348 bool RtcpParseCommonHeader(const uint8_t* buffer, |
337 const uint8_t* ptrDataEnd, | 349 size_t size_bytes, |
338 RTCPCommonHeader& parsedHeader); | 350 RtcpCommonHeader* parsed_header); |
339 | 351 |
340 class RTCPParserV2 { | 352 class RTCPParserV2 { |
341 public: | 353 public: |
342 RTCPParserV2( | 354 RTCPParserV2( |
343 const uint8_t* rtcpData, | 355 const uint8_t* rtcpData, |
344 size_t rtcpDataLength, | 356 size_t rtcpDataLength, |
345 bool rtcpReducedSizeEnable); // Set to true, to allow non-compound RTCP! | 357 bool rtcpReducedSizeEnable); // Set to true, to allow non-compound RTCP! |
346 ~RTCPParserV2(); | 358 ~RTCPParserV2(); |
347 | 359 |
348 RTCPPacketTypes PacketType() const; | 360 RTCPPacketTypes PacketType() const; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 bool ParseIJItem(); | 423 bool ParseIJItem(); |
412 | 424 |
413 bool ParseXr(); | 425 bool ParseXr(); |
414 bool ParseXrItem(); | 426 bool ParseXrItem(); |
415 bool ParseXrReceiverReferenceTimeItem(int block_length_4bytes); | 427 bool ParseXrReceiverReferenceTimeItem(int block_length_4bytes); |
416 bool ParseXrDlrr(int block_length_4bytes); | 428 bool ParseXrDlrr(int block_length_4bytes); |
417 bool ParseXrDlrrItem(); | 429 bool ParseXrDlrrItem(); |
418 bool ParseXrVoipMetricItem(int block_length_4bytes); | 430 bool ParseXrVoipMetricItem(int block_length_4bytes); |
419 bool ParseXrUnsupportedBlockType(int block_length_4bytes); | 431 bool ParseXrUnsupportedBlockType(int block_length_4bytes); |
420 | 432 |
421 bool ParseFBCommon(const RTCPCommonHeader& header); | 433 bool ParseFBCommon(const RtcpCommonHeader& header); |
422 bool ParseNACKItem(); | 434 bool ParseNACKItem(); |
423 bool ParseTMMBRItem(); | 435 bool ParseTMMBRItem(); |
424 bool ParseTMMBNItem(); | 436 bool ParseTMMBNItem(); |
425 bool ParseSLIItem(); | 437 bool ParseSLIItem(); |
426 bool ParseRPSIItem(); | 438 bool ParseRPSIItem(); |
427 bool ParseFIRItem(); | 439 bool ParseFIRItem(); |
428 bool ParsePsfbAppItem(); | 440 bool ParsePsfbAppItem(); |
429 bool ParsePsfbREMBItem(); | 441 bool ParsePsfbREMBItem(); |
430 | 442 |
431 bool ParseAPP(const RTCPCommonHeader& header); | 443 bool ParseAPP(const RtcpCommonHeader& header); |
432 bool ParseAPPItem(); | 444 bool ParseAPPItem(); |
433 | 445 |
434 private: | 446 private: |
435 const uint8_t* const _ptrRTCPDataBegin; | 447 const uint8_t* const _ptrRTCPDataBegin; |
436 const bool _RTCPReducedSizeEnable; | 448 const bool _RTCPReducedSizeEnable; |
437 const uint8_t* const _ptrRTCPDataEnd; | 449 const uint8_t* const _ptrRTCPDataEnd; |
438 | 450 |
439 bool _validPacket; | 451 bool _validPacket; |
440 const uint8_t* _ptrRTCPData; | 452 const uint8_t* _ptrRTCPData; |
441 const uint8_t* _ptrRTCPBlockEnd; | 453 const uint8_t* _ptrRTCPBlockEnd; |
442 | 454 |
443 ParseState _state; | 455 ParseState _state; |
444 uint8_t _numberOfBlocks; | 456 uint8_t _numberOfBlocks; |
445 | 457 |
446 RTCPPacketTypes _packetType; | 458 RTCPPacketTypes _packetType; |
447 RTCPPacket _packet; | 459 RTCPPacket _packet; |
448 }; | 460 }; |
449 | 461 |
450 class RTCPPacketIterator { | 462 class RTCPPacketIterator { |
451 public: | 463 public: |
452 RTCPPacketIterator(uint8_t* rtcpData, size_t rtcpDataLength); | 464 RTCPPacketIterator(uint8_t* rtcpData, size_t rtcpDataLength); |
453 ~RTCPPacketIterator(); | 465 ~RTCPPacketIterator(); |
454 | 466 |
455 const RTCPCommonHeader* Begin(); | 467 const RtcpCommonHeader* Begin(); |
456 const RTCPCommonHeader* Iterate(); | 468 const RtcpCommonHeader* Iterate(); |
457 const RTCPCommonHeader* Current(); | 469 const RtcpCommonHeader* Current(); |
458 | 470 |
459 private: | 471 private: |
460 uint8_t* const _ptrBegin; | 472 uint8_t* const _ptrBegin; |
461 uint8_t* const _ptrEnd; | 473 uint8_t* const _ptrEnd; |
462 | 474 |
463 uint8_t* _ptrBlock; | 475 uint8_t* _ptrBlock; |
464 | 476 |
465 RTCPCommonHeader _header; | 477 RtcpCommonHeader _header; |
466 }; | 478 }; |
467 } // RTCPUtility | 479 } // RTCPUtility |
468 } // namespace webrtc | 480 } // namespace webrtc |
469 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_UTILITY_H_ | 481 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_UTILITY_H_ |
OLD | NEW |