diff options
Diffstat (limited to 'webrtc/modules/rtp_rtcp/source/rtp_utility.cc')
-rw-r--r-- | webrtc/modules/rtp_rtcp/source/rtp_utility.cc | 151 |
1 files changed, 43 insertions, 108 deletions
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc index bf0b30a064..0f0ad835b1 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_utility.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_utility.cc @@ -10,38 +10,10 @@ #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" -#include <assert.h> -#include <math.h> // ceil -#include <string.h> // memcpy - -#if defined(_WIN32) -// Order for these headers are important -#include <winsock2.h> // timeval -#include <windows.h> // FILETIME -#include <MMSystem.h> // timeGetTime -#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC)) -#include <sys/time.h> // gettimeofday -#include <time.h> -#endif -#if (defined(_DEBUG) && defined(_WIN32) && (_MSC_VER >= 1400)) -#include <stdio.h> -#endif +#include <string.h> #include "webrtc/base/logging.h" #include "webrtc/modules/rtp_rtcp/source/byte_io.h" -#include "webrtc/system_wrappers/include/tick_util.h" - -#if (defined(_DEBUG) && defined(_WIN32) && (_MSC_VER >= 1400)) -#define DEBUG_PRINT(...) \ - { \ - char msg[256]; \ - sprintf(msg, __VA_ARGS__); \ - OutputDebugString(msg); \ - } -#else -// special fix for visual 2003 -#define DEBUG_PRINT(exp) ((void)0) -#endif // defined(_DEBUG) && defined(_WIN32) namespace webrtc { @@ -77,50 +49,18 @@ enum { }; /* - * Time routines. - */ - -uint32_t GetCurrentRTP(Clock* clock, uint32_t freq) { - const bool use_global_clock = (clock == NULL); - Clock* local_clock = clock; - if (use_global_clock) { - local_clock = Clock::GetRealTimeClock(); - } - uint32_t secs = 0, frac = 0; - local_clock->CurrentNtp(secs, frac); - if (use_global_clock) { - delete local_clock; - } - return ConvertNTPTimeToRTP(secs, frac, freq); -} - -uint32_t ConvertNTPTimeToRTP(uint32_t NTPsec, uint32_t NTPfrac, uint32_t freq) { - float ftemp = (float)NTPfrac / (float)NTP_FRAC; - uint32_t tmp = (uint32_t)(ftemp * freq); - return NTPsec * freq + tmp; -} - -uint32_t ConvertNTPTimeToMS(uint32_t NTPsec, uint32_t NTPfrac) { - int freq = 1000; - float ftemp = (float)NTPfrac / (float)NTP_FRAC; - uint32_t tmp = (uint32_t)(ftemp * freq); - uint32_t MStime = NTPsec * freq + tmp; - return MStime; -} - -/* * Misc utility routines */ #if defined(_WIN32) bool StringCompare(const char* str1, const char* str2, const uint32_t length) { - return (_strnicmp(str1, str2, length) == 0) ? true : false; + return _strnicmp(str1, str2, length) == 0; } #elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) bool StringCompare(const char* str1, const char* str2, const uint32_t length) { - return (strncasecmp(str1, str2, length) == 0) ? true : false; + return strncasecmp(str1, str2, length) == 0; } #endif @@ -131,10 +71,6 @@ size_t Word32Align(size_t size) { return size; } -uint32_t pow2(uint8_t exp) { - return 1 << exp; -} - RtpHeaderParser::RtpHeaderParser(const uint8_t* rtpData, const size_t rtpDataLength) : _ptrRTPDataBegin(rtpData), @@ -244,7 +180,7 @@ bool RtpHeaderParser::ParseRtcp(RTPHeader* header) const { return true; } -bool RtpHeaderParser::Parse(RTPHeader& header, +bool RtpHeaderParser::Parse(RTPHeader* header, RtpHeaderExtensionMap* ptrExtensionMap) const { const ptrdiff_t length = _ptrRTPDataEnd - _ptrRTPDataBegin; if (length < kRtpMinParseLength) { @@ -283,39 +219,39 @@ bool RtpHeaderParser::Parse(RTPHeader& header, return false; } - header.markerBit = M; - header.payloadType = PT; - header.sequenceNumber = sequenceNumber; - header.timestamp = RTPTimestamp; - header.ssrc = SSRC; - header.numCSRCs = CC; - header.paddingLength = P ? *(_ptrRTPDataEnd - 1) : 0; + header->markerBit = M; + header->payloadType = PT; + header->sequenceNumber = sequenceNumber; + header->timestamp = RTPTimestamp; + header->ssrc = SSRC; + header->numCSRCs = CC; + header->paddingLength = P ? *(_ptrRTPDataEnd - 1) : 0; for (uint8_t i = 0; i < CC; ++i) { uint32_t CSRC = ByteReader<uint32_t>::ReadBigEndian(ptr); ptr += 4; - header.arrOfCSRCs[i] = CSRC; + header->arrOfCSRCs[i] = CSRC; } - header.headerLength = 12 + CSRCocts; + header->headerLength = 12 + CSRCocts; // If in effect, MAY be omitted for those packets for which the offset // is zero. - header.extension.hasTransmissionTimeOffset = false; - header.extension.transmissionTimeOffset = 0; + header->extension.hasTransmissionTimeOffset = false; + header->extension.transmissionTimeOffset = 0; // May not be present in packet. - header.extension.hasAbsoluteSendTime = false; - header.extension.absoluteSendTime = 0; + header->extension.hasAbsoluteSendTime = false; + header->extension.absoluteSendTime = 0; // May not be present in packet. - header.extension.hasAudioLevel = false; - header.extension.voiceActivity = false; - header.extension.audioLevel = 0; + header->extension.hasAudioLevel = false; + header->extension.voiceActivity = false; + header->extension.audioLevel = 0; // May not be present in packet. - header.extension.hasVideoRotation = false; - header.extension.videoRotation = 0; + header->extension.hasVideoRotation = false; + header->extension.videoRotation = 0; if (X) { /* RTP header extension, RFC 3550. @@ -332,7 +268,7 @@ bool RtpHeaderParser::Parse(RTPHeader& header, return false; } - header.headerLength += 4; + header->headerLength += 4; uint16_t definedByProfile = ByteReader<uint16_t>::ReadBigEndian(ptr); ptr += 2; @@ -352,15 +288,16 @@ bool RtpHeaderParser::Parse(RTPHeader& header, ptrRTPDataExtensionEnd, ptr); } - header.headerLength += XLen; + header->headerLength += XLen; } - if (header.headerLength + header.paddingLength > static_cast<size_t>(length)) + if (header->headerLength + header->paddingLength > + static_cast<size_t>(length)) return false; return true; } void RtpHeaderParser::ParseOneByteExtensionHeader( - RTPHeader& header, + RTPHeader* header, const RtpHeaderExtensionMap* ptrExtensionMap, const uint8_t* ptrRTPDataExtensionEnd, const uint8_t* ptr) const { @@ -377,8 +314,8 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // Note that 'len' is the header extension element length, which is the // number of bytes - 1. - const uint8_t id = (*ptr & 0xf0) >> 4; - const uint8_t len = (*ptr & 0x0f); + const int id = (*ptr & 0xf0) >> 4; + const int len = (*ptr & 0x0f); ptr++; if (id == 15) { @@ -390,8 +327,7 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( RTPExtensionType type; if (ptrExtensionMap->GetType(id, &type) != 0) { // If we encounter an unknown extension, just skip over it. - LOG(LS_WARNING) << "Failed to find extension id: " - << static_cast<int>(id); + LOG(LS_WARNING) << "Failed to find extension id: " << id; } else { switch (type) { case kRtpExtensionTransmissionTimeOffset: { @@ -406,9 +342,9 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // | ID | len=2 | transmission offset | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - header.extension.transmissionTimeOffset = + header->extension.transmissionTimeOffset = ByteReader<int32_t, 3>::ReadBigEndian(ptr); - header.extension.hasTransmissionTimeOffset = true; + header->extension.hasTransmissionTimeOffset = true; break; } case kRtpExtensionAudioLevel: { @@ -422,9 +358,9 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // | ID | len=0 |V| level | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // - header.extension.audioLevel = ptr[0] & 0x7f; - header.extension.voiceActivity = (ptr[0] & 0x80) != 0; - header.extension.hasAudioLevel = true; + header->extension.audioLevel = ptr[0] & 0x7f; + header->extension.voiceActivity = (ptr[0] & 0x80) != 0; + header->extension.hasAudioLevel = true; break; } case kRtpExtensionAbsoluteSendTime: { @@ -438,9 +374,9 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // | ID | len=2 | absolute send time | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - header.extension.absoluteSendTime = + header->extension.absoluteSendTime = ByteReader<uint32_t, 3>::ReadBigEndian(ptr); - header.extension.hasAbsoluteSendTime = true; + header->extension.hasAbsoluteSendTime = true; break; } case kRtpExtensionVideoRotation: { @@ -454,14 +390,14 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | ID | len=0 |0 0 0 0 C F R R| // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - header.extension.hasVideoRotation = true; - header.extension.videoRotation = ptr[0]; + header->extension.hasVideoRotation = true; + header->extension.videoRotation = ptr[0]; break; } case kRtpExtensionTransportSequenceNumber: { if (len != 1) { - LOG(LS_WARNING) - << "Incorrect peer connection sequence number len: " << len; + LOG(LS_WARNING) << "Incorrect transport sequence number len: " + << len; return; } // 0 1 2 @@ -472,8 +408,8 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( uint16_t sequence_number = ptr[0] << 8; sequence_number += ptr[1]; - header.extension.transportSequenceNumber = sequence_number; - header.extension.hasTransportSequenceNumber = true; + header->extension.transportSequenceNumber = sequence_number; + header->extension.hasTransportSequenceNumber = true; break; } default: { @@ -502,5 +438,4 @@ uint8_t RtpHeaderParser::ParsePaddingBytes( return num_zero_bytes; } } // namespace RtpUtility - } // namespace webrtc |