Skip to content

feat(display): a host-owned display-criteria mode (#842) - #843

Merged
superuser404notfound merged 1 commit into
mainfrom
feat/842-host-owned-display-criteria
Oct 19, 2026
Merged

superuser404notfound merged 1 commit into
mainfrom
feat/842-host-owned-display-criteria

Conversation

@superuser404notfound

Copy link
Copy Markdown
Owner

Implements #842.

suppressDisplayCriteria means "AVKit writes", so a host that keeps the panel in its system output format, or writes its own criteria, paid up to 1 s of play-gate wait per HDR / DV title for an AVKit write that never came, and lost the engine's panel readout.

  • New LoadOptions.displayCriteriaOwner: DisplayCriteriaOwner (.engine default, .avKit, .host). Resolution in LoadOptions.effectiveDisplayCriteriaOwner: an explicit non-engine owner wins, otherwise suppressDisplayCriteria keeps meaning .avKit. No source break.
  • .host: no engine write (load, reload, HDR10 4K HEVC 50fps live HLS via nativeRemoteHLS: AVPlayer exposes no video track (audio-only, black); no HDR display-criteria negotiation. VLC + Android decode it fine #168 nativeRemoteHLS late apply), clearStale for an engine leftover (reset() stays didApply-gated), .brief play-gate grace (renamed parameter criteriaWrittenBeforeLoad), panel readout taken, observation armed so a write during the load is still seen.
  • .secondary engines stay non-writers without a readout regardless of the owner passed.
  • Field is correctable via reloadAtCurrentPosition(applying:) like suppressDisplayCriteria; inventory updated.
  • Docs: docs/api.md rows, CHANGELOG.

Tests: Issue842DisplayCriteriaOwnerTests plus the renamed-parameter suites (DisplayCriteria*, RemoteHLSFormatDetection, Issue460, SharedOutputRole, SoftwarePathEscalation, Issue493): 170 tests green on macOS. Not run on tvOS hardware; the play-gate timing on a real panel is the device check.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WJcXkGQrMiBPixVEFTSBJS

suppressDisplayCriteria means "AVKit writes the criteria from the item",
and every branch behind it is built around that inbound write: the play
gate holds the full 1000 ms Stage 1 for HDR and Dolby Vision, the panel
readout is skipped as stale, and observation is armed for the write. A
host that keeps the panel in its system output format (a Dynamic Range
"System" setting) or writes criteria of its own had no correct setting.

LoadOptions.displayCriteriaOwner names the writer: .engine (default,
defers to suppressDisplayCriteria), .avKit, and .host. A host-owned load
never writes, clears only a criteria the engine left applied, takes the
brief play-gate budget like an engine write (the write happened before
load()), reads the panel, and still waits out a switch it sees running.
An explicit owner wins over the Bool; a secondary engine stays a
non-writer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJcXkGQrMiBPixVEFTSBJS
@superuser404notfound
superuser404notfound merged commit 58303c7 into main Oct 19, 2026
4 checks passed
@superuser404notfound
superuser404notfound deleted the feat/842-host-owned-display-criteria branch October 19, 2026 10:06
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.

1 participant