Skip to content

Capture-device "On dropout" policy needs adapter liveness (signalPresent), not frameId cadence #562

Open

Description

@iamfatness

Follow-up from #535 slice 4a (bus health on air). The on-air black dropout policy fires on a source reading stalled. The bus derives stalled from "no NEW frameId for N ms", which is correct for Zoom decoded video (frames advance continuously) but wrong for change-driven producers that legitimately re-serve the same frameId while healthy: WGC screen/window capture (frames only on change), browser sources (SHM sequence advances only on repaint), stills (stable frameId by design), paused clips.

Slice 4a therefore ships the policy for Zoom sources only (1.5 s on-air hysteresis, recover on first new frame; black on the program pass only). The capture-row "On dropout" combo was removed.

To re-enable for capture

  • Capture adapters already know real liveness: CaptureDeviceInfo.signalPresent / connectionState (UVC signal, SRT socket state, WGC session alive, browser host alive + freeze grace). Surface that per tick to MediaCore's health annotation (cheap cache updated on enumerate/connect events, not a per-tick enumerate()), so a capture layer reads stalled/failed from the adapter's own signal, never from frameId cadence.
  • Then restore the capture-row combo and lift the zoom:-only guard in set-source-policy / SetSourceDropoutPolicy / source.dropout.set.
  • Media/still sources: a still is never "stalled"; a paused clip is deliberately held — exempt by kind. Also feed the still cache's desired set into the warming state so an opening still/clip reads warming, not failed.

Evidence

Final whole-branch review of codex/535-slice4a-health-on-air (2026-09-19): M1. Producers traced: WgcScreenCaptureAdapter.cpp (frameId only in onFrame), BrowserSourceHostAdapter.cpp:263-271, StillMediaFrameCache.h (stable frameId), OwnedMediaFrameSource.h hold path.

Activity

  1. added a commit that references this issue on Sep 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlogRanked in docs/BACKLOG.md

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions