Skip to content

fix(tiles): pin the Tiles wall at 1080p so preview no longer drops on-air members - #514

Merged
iamfatness merged 1 commit into
mainfrom
fix/tiles-wall-1080p-no-preview-flip
Sep 14, 2026
Merged

iamfatness merged 1 commit into
mainfrom
fix/tiles-wall-1080p-no-preview-flip

Conversation

@iamfatness

Copy link
Copy Markdown
Owner

The report

"CoreVideo tiles participants are dropping as I go through different people in preview" — a few hundred ms, then their color changes.

Root cause (confirmed live)

A wall member sits at program-tiles = 720p. Soloing them in Preview makes them a preview route = 1080p. Resolution is part of the Zoom engine's subscription key, so 720p→1080p is a genuine renderer destroy/create on a source that is live on the Program wall — that teardown is the drop, and the "color change" is the colorFromParticipantId placeholder slab painted until the rebuilt feed lands. Moving to the next person flips the previous one 1080p→720p — a second teardown.

It is one feed flipping, not two grabs: m_subs is keyed by participant_id, and every surface (wall tile, preview, program) renders that single decoded frame. So the wall tile and the preview are already the same feed at two sizes — the bug is purely the resolution key changing.

Fix

Tiles (program-tiles / preview-tiles) now request 1080p, the highest tier — so a soloed wall member has no lower tier to fall back to. Same feed, no re-subscribe, no drop.

That required raising the concurrent-1080p cap, which is the historically dangerous part: the cap of 4 exists because 6 concurrent 1080p crashed the SDK subprocess (0xc000000d) — but that was measured on the 2026-06 CPU-I420 path.

Soak-proven before shipping

Live, real 8-person meeting, all 8 wall members at 1080p on Program for 30+ minutes:

render / delivered 60.0/s / 60.0/s
underruns / skipped / gpuNotReady 0 / 0 / 0
monitor shedding none
engine subprocess never crashed or respawned
totalChurn across a full operator preview run flat (per-source churn = 1, the one-time take)

The old build climbed ~30 churn events per minute of previewing; this one held flat, owner-confirmed ("looks good to me").

Cap = 8, deliberately

8 is the number the soak proved and the meeting's camera count. Not raised higher on extrapolation — the constant's standing rule. Graceful past 8: wall members are granted before the wall background in payload order, so a 9th 1080p source (a live wall background, a >8 wall, a non-wall bus route) is demoted to 720p stably rather than flipping a member. Screen share is 1080p and bypasses the camera counter, so 8 wall + a share = 9 concurrent 1080p — one step past what was soaked, flagged in the code and docs to watch.

Follow-ups (not in this PR)

  • A wall larger than 8, or a full wall + screen share, needs a bigger-meeting soak before the cap goes above 8.
  • ZoomSourceSetPolicy's purpose-override still stamps an on-air wall member preview when soloed; harmless for resolution now (both 1080p) but semantically off — cleanup, not a fix.

Tests

The old ACueRaisesOnceTheTakeSendsNothingAndLeavingTheBusDropsBack asserted the exact behavior this removes; rewritten as AWallMemberCuedToPreviewDoesNotReSubscribe (a wall member cued to preview sends nothing). Tier + cap assertions updated. 931 native tests pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ

…-air members

Owner report: "CoreVideo tiles participants are dropping as I go through
different people in preview" — with a few hundred ms then a color change.

Root cause, confirmed live: a wall member sat at program-tiles (720p); soloing
them in Preview made them a preview route (1080p). Resolution is part of the
engine's subscription key, so that 720p->1080p is a real renderer destroy/create
on a source LIVE on the Program wall — the drop, and the color change is the
colorFromParticipantId placeholder slab shown until the rebuilt feed lands.
Leaving preview flips them back 1080p->720p, a second teardown. It is ONE feed
flipping, not two grabs: m_subs is keyed by participant_id and every surface
(wall tile, preview, program) renders that one decoded frame.

Fix: Tiles (program-tiles / preview-tiles) now request 1080p, the highest tier,
so a soloed wall member has no lower tier to fall back to — same feed, no
re-subscribe, no drop. This needs the concurrent-1080p cap raised, and that is
the historically dangerous part: the cap of 4 came from a 2026-06 crash at 6
concurrent 1080p on the CPU-I420 path (bd3ca). So it was SOAK-PROVEN before
shipping — a live 8-person meeting, all 8 wall members at 1080p on Program for
30+ min: 60fps delivery, 0 underruns, no monitor shedding, no engine
crash/respawn, and totalChurn held FLAT across a full operator preview run
(per-source churn = 1, the one-time take) where the old build climbed ~30/min.

Cap set to 8 (proven, the meeting's camera count) — not higher on extrapolation.
Graceful past 8: members are granted before the wall background in payload order,
so a 9th 1080p source is demoted to 720p stably rather than flipping a member;
screen share is 1080p and bypasses the camera counter (8 wall + share = 9
concurrent, one step past the soak — flagged to watch).

The old ACueRaises test asserted the exact behavior this removes; rewritten as
the regression test (a wall member cued to preview sends nothing). Tier + cap
assertions updated. 931 native tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ
iamfatness added a commit that referenced this pull request Sep 14, 2026
…ist) (#520)

Metrics from a ~5h real test-meeting session (10->16 participants, 8-member wall
at 1080p, streaming to YouTube), read live from /snapshot and the logs. Records
the session numbers and the prioritized list, cross-referencing the issues filed
from it: #515/#514 (P0 in flight), #516/#517/#509 (P1 load), #518/#519 (P2
verify/cleanup), plus the cap-vs-9-camera-on note and the two lying counters.


Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ

Co-authored-by: Claude <noreply@anthropic.com>
@iamfatness
iamfatness merged commit ab90bde into main Sep 14, 2026
19 checks passed
@iamfatness
iamfatness deleted the fix/tiles-wall-1080p-no-preview-flip branch October 1, 2026 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants