pub struct SourceMap { /* private fields */ }Expand description
Translates one source’s timestamps onto the broadcast clock.
A source numbers from its own zero (a file starts at its first PTS, an encoder restarts at
zero), while the broadcast numbers from the shared epoch. The first frame anchors onto the
live edge, preserving the source’s spacing from there on; a reset re-anchors forward,
preserving the real idle gap measured on the broadcast’s monotonic clock. Backwards steps
within MAX_REORDER keep their offset, so permitted B-frame reordering
inside a group survives verbatim. Translated timestamps keep the source’s timescale.
The broadcast wall mapping is never touched: translating a reset is not a new epoch, and a discontinuity marker the adapter emits alongside is a delivery event the playhead reacts to, not a clock the catalog republishes. Retained records keep their timestamps.
Each publisher adapter owns one per source and wires its own restart detection to
reset; the automatic path only separates reordering from resets by size.
Implementations§
Source§impl SourceMap
impl SourceMap
Sourcepub const MAX_REORDER: Duration
pub const MAX_REORDER: Duration
The largest backwards source step still treated as permitted in-group reordering (B-frames present out of decode order) rather than a source reset.
A larger backwards step re-anchors the source forward instead. Adapters that detect a
restart out of band re-anchor explicitly with reset; this bound only
separates the two for the automatic path.
Sourcepub fn translate(&mut self, pts: Timestamp) -> Result<Timestamp>
pub fn translate(&mut self, pts: Timestamp) -> Result<Timestamp>
Translate pts onto the broadcast clock, sampling the arrival time.
Sourcepub fn translate_at(&mut self, pts: Timestamp, now: u64) -> Result<Timestamp>
pub fn translate_at(&mut self, pts: Timestamp, now: u64) -> Result<Timestamp>
Translate pts onto the broadcast clock, arriving at monotonic now micros.
The deterministic core behind translate: synthetic sources pin the
arrival instants instead of sampling them.
Sourcepub fn reset(&mut self, pts: Timestamp) -> Result<Timestamp>
pub fn reset(&mut self, pts: Timestamp) -> Result<Timestamp>
Re-anchor after an explicitly detected source restart, preserving the idle gap.
The adapter path for a restart it observes out of band (an encoder reload, a file loop): the next frame continues after everything published so far plus the downtime since the previous frame, instead of rewinding the broadcast.