20 lines
667 B
C++
20 lines
667 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
namespace sc {
|
|
|
|
// RTP clock rate for video is 90 kHz. Convert a monotonic nanosecond timestamp
|
|
// into a 32-bit RTP timestamp. Overflows wrap around intentionally.
|
|
constexpr uint32_t rtp_timestamp_from_ns ( uint64_t nanoseconds ) noexcept {
|
|
// (nanoseconds * 90_000) / 1_000_000_000
|
|
// Simplify: 90_000 / 1_000_000_000 = 9 / 100_000
|
|
return static_cast<uint32_t> ( ( nanoseconds * 9ULL ) / 100'000ULL );
|
|
}
|
|
|
|
static_assert ( rtp_timestamp_from_ns ( 0 ) == 0 );
|
|
static_assert ( rtp_timestamp_from_ns ( 1'000'000'000ULL ) == 90'000 );
|
|
static_assert ( rtp_timestamp_from_ns ( 500'000'000ULL ) == 45'000 );
|
|
|
|
} // namespace sc
|