Select and watch any camera angle via a data-driven view strip#67
Merged
Conversation
The camera selector was five hardcoded tiles (Grid/Front/Rear/Left/Right) wired to four fixed Flyleaf hosts, so the B-pillar angles that HW4/AI4 vehicles record since the 2025 Spring Update were ingested and played by the engine but unreachable in the UI. The strip is now an ItemsControl over CameraViewOptions: the grid plus one tile per camera the selected clip actually recorded, in canonical order. Six hosts (one per recognized camera) live in a pool; the code-behind re-parents each into its tile / the primary slot per view, and parks the rest. View ids are now the canonical camera names, so export and the event auto-focus map 1:1 onto camera files. Along the way: - event.json camera ids follow the community-documented map (0 front, 3/4 repeaters, 5/6 pillars, 7 rear), so Sentry events auto-focus the camera that actually triggered them instead of always the front. - Number keys 1-9 select tiles by strip position (1-7 on a six-camera clip); unavailable positions fall through unhandled. - Switching to a clip that lacks the watched camera falls back to Front. - The 2x2 grid view intentionally stays the classic four cameras; an adaptive grid is a separate follow-up. Verified end-to-end against synthetic six-camera and four-camera clips: pillar tiles appear with live previews, key 6/7 and event id 5 focus the pillars, and the strip shrinks with a Front fallback on four-camera clips.
Per Daniel's style preference: no column-driven hard wraps. The comments I added for the data-driven camera strip now break only at sentence boundaries.
A <summary> containing nested inline tags reads badly crammed onto one line; put the opening tag, content, and closing tag on their own lines.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
HW4/AI4 vehicles (2025 Spring Update and later) record six cameras — the classic four plus the two B-pillars. Since #65/#66 the engine ingests and plays all of them, but the UI was still five hardcoded tiles wired to four fixed Flyleaf hosts, so pillar footage was invisible. This is the P1b step of the dynamic-cameras plan.
What
ItemsControloverCameraViewOptions: the grid tile plus one tile per camera the selected clip actually recorded, in canonical order. HW3 clips look exactly like before (Grid/Front/Rear/Left/Right); HW4 clips add Left Pillar and Right Pillar tiles with live previews.ActiveExportCameraNameis the selected view directly and export works for pillar angles too.CameraIdToViewimplements the community-documented event.json camera map (0 front, 3/4 repeaters, 5/6 pillars, 7 rear), so a Sentry event now auto-focuses the camera that actually triggered it (with a Front fallback when the clip lacks it).Verification