Phase 7.5 step 2
All checks were successful
CI / React UI Build (push) Successful in 10s
CI / Native Windows Build And Tests (push) Successful in 2m45s
CI / Windows Release Package (push) Successful in 2m52s

This commit is contained in:
Aiden
2026-05-11 21:36:17 +10:00
parent f8adbbe0fe
commit c5cead6003
5 changed files with 308 additions and 5 deletions

View File

@@ -7,7 +7,7 @@ Phase 7 made backend lifecycle, playout policy, ready-frame queueing, late/drop
## Status
- Phase 7.5 design package: proposed.
- Phase 7.5 implementation: Step 1 in progress.
- Phase 7.5 implementation: Step 2 in progress.
- Current alignment: Phase 7 is complete. `RenderOutputQueue`, `VideoPlayoutPolicy`, `VideoPlayoutScheduler`, `VideoBackendLifecycle`, and backend playout telemetry exist. The backend worker fills the ready queue on completion demand, but render production is not yet proactively driven by queue pressure or video cadence.
Current footholds:
@@ -18,6 +18,7 @@ Current footholds:
- `VideoPlayoutPolicy` names ready-frame headroom and catch-up policy.
- `HealthTelemetry::BackendPlayoutSnapshot` exposes queue depth, underruns, late/drop streaks, and recovery decisions.
- Step 1 adds baseline timing fields for ready-queue min/max/zero-depth samples and output render duration.
- Step 2 adds a pure `OutputProductionController` for queue-pressure production decisions.
## Timing Review Findings
@@ -177,13 +178,20 @@ Introduce a pure policy helper for queue-pressure decisions.
Initial target:
- input: ready depth, capacity, target depth, late/drop streaks, underrun count
- output: produce, wait, or throttle
- tests cover low queue, full queue, late/drop pressure, and normalized policy values
- [x] input: ready depth, capacity, target depth, late/drop streaks, underrun count
- [x] output: produce, wait, or throttle
- [x] tests cover low queue, full queue, late/drop pressure, and normalized policy values
Exit criteria:
- production cadence policy can evolve without touching DeckLink or GL code
- [x] production cadence policy can evolve without touching DeckLink or GL code
Implementation notes:
- `OutputProductionController` lives in `videoio` and depends only on `VideoPlayoutPolicy`.
- `OutputProductionPressure` carries ready-queue depth/capacity plus underrun and late/drop pressure.
- `OutputProductionDecision` returns `Produce`, `Wait`, or `Throttle`, a requested frame count, effective target/max limits, and a reason string.
- Step 2 is intentionally not wired into live playback yet. Step 3 should use this policy to drive the proactive producer loop.
### Step 3. Add A Proactive Producer Loop