11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
19PROMEKI_NAMESPACE_BEGIN
91 RtpMediaClock() =
default;
109 static RtpMediaClock frameZeroAnchored(uint32_t mediaClockHz,
const FrameRate &rate);
131 static RtpMediaClock ptpAnchored(uint32_t mediaClockHz,
const FrameRate &rate,
132 int64_t anchorUtcNs);
135 bool isValid()
const {
return _mediaClockHz > 0 && _frameRate.isValid(); }
138 uint32_t mediaClockHz()
const {
return _mediaClockHz; }
141 const FrameRate &frameRate()
const {
return _frameRate; }
144 int64_t anchorUtcNs()
const {
return _anchorUtcNs; }
147 uint32_t anchorRtpTs()
const {
return _anchorRtpTs; }
150 int64_t anchorFrameIndex()
const {
return _anchorFrameIndex; }
153 bool hasPtpAnchor()
const {
return _anchorUtcNs > 0; }
156 const Duration &trOffset()
const {
return _trOffset; }
164 void setTrOffset(
const Duration &d) { _trOffset = d; }
183 uint32_t rtpTsForFrame(int64_t frameIndex)
const;
200 int64_t tvdUtcNs(int64_t frameIndex)
const;
219 int64_t tvdUtcNsForRtpTs(uint32_t rtpTs)
const;
240 uint32_t mediaClkDirectOffset()
const;
243 explicit RtpMediaClock(uint32_t mediaClockHz,
const FrameRate &rate)
244 : _mediaClockHz(mediaClockHz), _frameRate(rate) {}
246 uint32_t _mediaClockHz = 0;
247 FrameRate _frameRate;
248 int64_t _anchorFrameIndex = 0;
249 int64_t _anchorUtcNs = 0;
250 uint32_t _anchorRtpTs = 0;
256 Duration _trOffset = Duration::zero();