Compact NTP representation was designed exactly for that purpose: calculate RTT. No need to map to ms before doing arithmetic on this values. Because of this change there is no need to keep mapping between compact ntp presentation and milliseconds in the RTCPSender. BUG=webrtc:5565 R=stefan@webrtc.org Review URL: https://codereview.webrtc.org/1491843004 . Cr-Commit-Position: refs/heads/master@{#11710}
50 lines
1.9 KiB
C++
50 lines
1.9 KiB
C++
/*
|
|
* Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_TIME_UTIL_H_
|
|
#define WEBRTC_MODULES_RTP_RTCP_SOURCE_TIME_UTIL_H_
|
|
|
|
#include "webrtc/base/basictypes.h"
|
|
#include "webrtc/system_wrappers/include/ntp_time.h"
|
|
|
|
namespace webrtc {
|
|
|
|
// Converts NTP timestamp to RTP timestamp.
|
|
inline uint32_t NtpToRtp(NtpTime ntp, uint32_t freq) {
|
|
uint32_t tmp = (static_cast<uint64_t>(ntp.fractions()) * freq) >> 32;
|
|
return ntp.seconds() * freq + tmp;
|
|
}
|
|
// Return the current RTP timestamp from the NTP timestamp
|
|
// returned by the specified clock.
|
|
inline uint32_t CurrentRtp(const Clock& clock, uint32_t freq) {
|
|
return NtpToRtp(NtpTime(clock), freq);
|
|
}
|
|
|
|
// Helper function for compact ntp representation:
|
|
// RFC 3550, Section 4. Time Format.
|
|
// Wallclock time is represented using the timestamp format of
|
|
// the Network Time Protocol (NTP).
|
|
// ...
|
|
// In some fields where a more compact representation is
|
|
// appropriate, only the middle 32 bits are used; that is, the low 16
|
|
// bits of the integer part and the high 16 bits of the fractional part.
|
|
inline uint32_t CompactNtp(NtpTime ntp) {
|
|
return (ntp.seconds() << 16) | (ntp.fractions() >> 16);
|
|
}
|
|
// Converts interval between compact ntp timestamps to milliseconds.
|
|
// This interval can be upto ~18.2 hours (2^16 seconds).
|
|
inline uint32_t CompactNtpIntervalToMs(uint32_t compact_ntp_interval) {
|
|
uint64_t value = static_cast<uint64_t>(compact_ntp_interval);
|
|
return (value * 1000 + (1 << 15)) >> 16;
|
|
}
|
|
|
|
} // namespace webrtc
|
|
#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_TIME_UTIL_H_
|