Skip to main content

SourceMap

Struct SourceMap 

Source
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

Source

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.

Source

pub fn new(clock: Clock) -> Self

A translator onto clock, unanchored until the first frame.

Source

pub fn clock(&self) -> Clock

The broadcast clock this source translates onto.

Source

pub fn translate(&mut self, pts: Timestamp) -> Result<Timestamp>

Translate pts onto the broadcast clock, sampling the arrival time.

Source

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.

Source

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.

Source

pub fn reset_at(&mut self, pts: Timestamp, now: u64) -> Result<Timestamp>

reset with an explicit arrival instant, for synthetic sources.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSync for T
where T: Sync,

Source§

impl<T> MaybeSync for T
where T: Sync,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more