supervision-js
    Preparing search index...

    Interface MediaRendererState

    interface MediaRendererState {
        rendererBackend: string | null;
        playbackState: MediaRendererPlaybackState;
        fit: MediaRendererFit;
        presentedTime?: number | null;
        currentTime: number;
        playbackRate: number;
        duration: number | null;
        mediaWidth: number;
        mediaHeight: number;
        presentedFrames: number;
        activeDetectionFrameTime: number | null;
        activeDetectionFrameIndex: number | null;
        activeDetectionCount: number;
        drawnMaskFrameTime?: number | null;
        playbackGateReach?: PlaybackGateReach;
        renderPreparationGateAbandoned?: boolean;
        maskHeldStale?: boolean;
        seeking?: boolean;
        scrubbing?: boolean;
        detectionBuffer: DetectionBufferState;
        lastFrameRenderTimings: MediaFrameRenderTimings | null;
        source: MediaSourceState;
    }
    Index
    rendererBackend: string | null
    presentedTime?: number | null

    Media time of the pixels currently composited, or null before the first frame reaches the scene. Unlike currentTime, this does not move when a producer advances its playhead ahead of the picture under load.

    currentTime: number
    playbackRate: number
    duration: number | null
    mediaWidth: number
    mediaHeight: number
    presentedFrames: number
    activeDetectionFrameTime: number | null
    activeDetectionFrameIndex: number | null
    activeDetectionCount: number
    drawnMaskFrameTime?: number | null

    Detection frame the mask raster on screen belongs to, null when no mask is up. A renderer should either name activeDetectionFrameTime or draw no raster; another value exposes a presentation invariant breach.

    playbackGateReach?: PlaybackGateReach

    How far the active playback gates reach on the source this renderer opened.

    renderPreparationGateAbandoned?: boolean

    The render-preparation gate stopped playback for artifacts that never arrived and gave up on them, so the picture is moving without them. False again once preparation covers the playhead.

    maskHeldStale?: boolean

    Whether the raster on screen belongs to a frame other than the one the rest of the annotations were drawn from. Renderers report the mismatch instead of hiding it so diagnostics can fail loudly.

    seeking?: boolean

    Whether the playhead has been moved to a frame that is not on screen yet. playbackState cannot answer this: it keeps reporting what the transport settled on before the seek, so a seek of any length reads as paused or playing.

    A scrub sets this on every tick, so a host that draws it owes the viewer a delay before it appears, and owes them scrubbing too: a viewer dragging the playhead is not waiting for the picture, they are leading it.

    It answers for the transport, which settles one message before the frame it landed on reaches this thread. In that window the picture on screen is the cached stand-in the seek painted on its way out, which can be a quarter of a second from the frame requested, while this already reads false. A host that needs "is the right picture up" should compare the presented frame's own media time; reading a position the instant a seek resolves can return a frame that was never asked for.

    scrubbing?: boolean

    Whether a drag is open on the playhead. True from the first scrub of a gesture until the seek that lands it, which is what separates a viewer leading the picture from one waiting on it.

    detectionBuffer: DetectionBufferState
    lastFrameRenderTimings: MediaFrameRenderTimings | null