| 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 |
| 11 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_UTILITY_H_ | 11 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_UTILITY_H_ |
| 12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_UTILITY_H_ | 12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_UTILITY_H_ |
| 13 | 13 |
| 14 #include <stddef.h> // size_t, ptrdiff_t | |
| 15 | |
| 16 #include <map> | 14 #include <map> |
| 17 | 15 |
| 18 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" | 16 #include "webrtc/modules/rtp_rtcp/include/receive_statistics.h" |
| 19 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 17 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
| 20 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" | 18 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h" |
| 21 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h" | 19 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h" |
| 22 #include "webrtc/typedefs.h" | 20 #include "webrtc/typedefs.h" |
| 23 | 21 |
| 24 namespace webrtc { | 22 namespace webrtc { |
| 25 | 23 |
| 26 const uint8_t kRtpMarkerBitMask = 0x80; | 24 const uint8_t kRtpMarkerBitMask = 0x80; |
| 27 | 25 |
| 28 RtpData* NullObjectRtpData(); | 26 RtpData* NullObjectRtpData(); |
| 29 RtpFeedback* NullObjectRtpFeedback(); | 27 RtpFeedback* NullObjectRtpFeedback(); |
| 30 RtpAudioFeedback* NullObjectRtpAudioFeedback(); | 28 RtpAudioFeedback* NullObjectRtpAudioFeedback(); |
| 31 ReceiveStatistics* NullObjectReceiveStatistics(); | 29 ReceiveStatistics* NullObjectReceiveStatistics(); |
| 32 | 30 |
| 33 namespace RtpUtility { | 31 namespace RtpUtility { |
| 34 // January 1970, in NTP seconds. | |
| 35 const uint32_t NTP_JAN_1970 = 2208988800UL; | |
| 36 | 32 |
| 37 // Magic NTP fractional unit. | 33 struct Payload { |
| 38 const double NTP_FRAC = 4.294967296E+9; | 34 char name[RTP_PAYLOAD_NAME_SIZE]; |
| 35 bool audio; |
| 36 PayloadUnion typeSpecific; |
| 37 }; |
| 39 | 38 |
| 40 struct Payload | 39 typedef std::map<int8_t, Payload*> PayloadTypeMap; |
| 41 { | |
| 42 char name[RTP_PAYLOAD_NAME_SIZE]; | |
| 43 bool audio; | |
| 44 PayloadUnion typeSpecific; | |
| 45 }; | |
| 46 | 40 |
| 47 typedef std::map<int8_t, Payload*> PayloadTypeMap; | 41 bool StringCompare(const char* str1, const char* str2, const uint32_t length); |
| 48 | 42 |
| 49 uint32_t pow2(uint8_t exp); | 43 // Round up to the nearest size that is a multiple of 4. |
| 44 size_t Word32Align(size_t size); |
| 50 | 45 |
| 51 // Returns true if |newTimestamp| is older than |existingTimestamp|. | 46 class RtpHeaderParser { |
| 52 // |wrapped| will be set to true if there has been a wraparound between the | 47 public: |
| 53 // two timestamps. | 48 RtpHeaderParser(const uint8_t* rtpData, size_t rtpDataLength); |
| 54 bool OldTimestamp(uint32_t newTimestamp, | 49 ~RtpHeaderParser(); |
| 55 uint32_t existingTimestamp, | |
| 56 bool* wrapped); | |
| 57 | 50 |
| 58 bool StringCompare(const char* str1, | 51 bool RTCP() const; |
| 59 const char* str2, | 52 bool ParseRtcp(RTPHeader* header) const; |
| 60 const uint32_t length); | 53 bool Parse(RTPHeader* parsedPacket, |
| 54 RtpHeaderExtensionMap* ptrExtensionMap = nullptr) const; |
| 61 | 55 |
| 62 // Round up to the nearest size that is a multiple of 4. | 56 private: |
| 63 size_t Word32Align(size_t size); | 57 void ParseOneByteExtensionHeader(RTPHeader* parsedPacket, |
| 58 const RtpHeaderExtensionMap* ptrExtensionMap, |
| 59 const uint8_t* ptrRTPDataExtensionEnd, |
| 60 const uint8_t* ptr) const; |
| 64 | 61 |
| 65 class RtpHeaderParser { | 62 uint8_t ParsePaddingBytes(const uint8_t* ptrRTPDataExtensionEnd, |
| 66 public: | 63 const uint8_t* ptr) const; |
| 67 RtpHeaderParser(const uint8_t* rtpData, size_t rtpDataLength); | |
| 68 ~RtpHeaderParser(); | |
| 69 | 64 |
| 70 bool RTCP() const; | 65 const uint8_t* const _ptrRTPDataBegin; |
| 71 bool ParseRtcp(RTPHeader* header) const; | 66 const uint8_t* const _ptrRTPDataEnd; |
| 72 bool Parse(RTPHeader& parsedPacket, | 67 }; |
| 73 RtpHeaderExtensionMap* ptrExtensionMap = NULL) const; | |
| 74 | |
| 75 private: | |
| 76 void ParseOneByteExtensionHeader( | |
| 77 RTPHeader& parsedPacket, | |
| 78 const RtpHeaderExtensionMap* ptrExtensionMap, | |
| 79 const uint8_t* ptrRTPDataExtensionEnd, | |
| 80 const uint8_t* ptr) const; | |
| 81 | |
| 82 uint8_t ParsePaddingBytes( | |
| 83 const uint8_t* ptrRTPDataExtensionEnd, | |
| 84 const uint8_t* ptr) const; | |
| 85 | |
| 86 const uint8_t* const _ptrRTPDataBegin; | |
| 87 const uint8_t* const _ptrRTPDataEnd; | |
| 88 }; | |
| 89 } // namespace RtpUtility | 68 } // namespace RtpUtility |
| 90 } // namespace webrtc | 69 } // namespace webrtc |
| 91 | 70 |
| 92 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_UTILITY_H_ | 71 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_UTILITY_H_ |
| OLD | NEW |