Files
screen_cast/include/screencast/utils/clock.h
T

20 lines
640 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