/** The catalog media roles that carry hang renditions. */ export type CatalogFecRole = 'video' | 'audio'; /** One media source's `fec` block, as `locateCatalogFecSource` found it. */ export type CatalogFecSource = { readonly dialect: 'hang'; readonly role: CatalogFecRole; /** The rendition object. */ readonly entry: Record; /** The rendition's `fec` value, unvalidated (may be undefined). */ readonly fec: unknown; /** JSON path of that `fec` block. */ readonly fecPath: string; } | { readonly dialect: 'msf'; /** Index of the entry in `tracks[]`. */ readonly index: number; /** The `tracks[]` entry (an empty object when the entry is not an object). */ readonly entry: Record; /** The entry's `fec` value, unvalidated (may be undefined). */ readonly fec: unknown; /** JSON path of that `fec` block. */ readonly fecPath: string; }; /** * Locate the catalog entry that declares one media source's `fec` block, in * either catalog dialect. * * A hang `video`/`audio` rendition named `source` wins, in `roles` order, over * a `tracks[]` entry of the same name: when a catalog carries rendition blocks * beside a `tracks[]` switching-set index (the unified ABR ladder catalog), * the rendition blocks are authoritative, exactly as they are for hang's own * catalog decode. The precedence is keyed on the rendition EXISTING as an * object, not on it carrying `fec`: a rendition without `fec` locates with * `fec: undefined` and never falls through to `tracks[]`. * * Otherwise the first `tracks[]` entry named `source` locates. Returns * undefined when neither dialect names it, or when `catalog` is not an object. * * @param roles the hang roles to search, in order (both by default). A typed * track reference passes its own role only. */ export declare function locateCatalogFecSource(catalog: unknown, source: string, roles?: readonly CatalogFecRole[]): CatalogFecSource | undefined; /** * Whether an `iso-ssbg1-v1` block's optional `interleaveDepthMs` span is * usable: absent, or a non-negative safe integer. Zero or absence supplies no * elapsed deadline and still permits in-band FEC. True for every block that * names another profile (the span is not read) and for a non-object. */ export declare function isoBlockSpanUsable(fec: unknown): boolean; /** * Whether one catalog `fec` block leaves its FEC available * (draft-ramadan-moq-fec ยง5.1): the decision the container's * `catalogFecUnavailable` explains with a typed reason. * * False when the block declares an FEC instance (any `algorithm` but `"none"`) * and names no implemented `blockProfile` (the retired `k-padded-v1` * included), or carries an `iso-ssbg1-v1` span it cannot use; and when a block * declaring no FEC instance carries a profile token that is not implemented. * True for a non-object and for every other block. It reads only the profile * and the span: malformed geometry (`sourceSymbols`, `symbolSize`) is * `catalogFecDeclaresUnconfigurableInstance`'s. * * A receiver applies no FEC to a source whose block is unavailable and joins * none of its repair tracks, without failing the session. */ export declare function catalogFecAvailable(fec: unknown): boolean; /** * Whether a source's `fec` block declares an FEC instance (any `algorithm` * but `"none"`) whose `sourceSymbols` or `symbolSize` is not a positive * integer. Geometry a decoder cannot configure is a malformed catalog, not * "no FEC": the container's per-track resolver throws `track_fec` for exactly * this block, whatever its profile or span. */ export declare function catalogFecDeclaresUnconfigurableInstance(fec: unknown): boolean; //# sourceMappingURL=catalog-fec-source.d.ts.map