aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/rtp_rtcp/source/rtp_utility.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webrtc/modules/rtp_rtcp/source/rtp_utility.cc')
-rw-r--r--webrtc/modules/rtp_rtcp/source/rtp_utility.cc151
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