6.4.3 - Play-gate start grace sized by what can still switch
The post-load play-gate no longer spends the Dolby Vision cold-start budget on sessions no dynamic-range switch can reach.
Fixed
-
The play-gate's Stage 1 budget is sized by whether a switch can still arrive. Before
play(), the engine waits for a pending panel handshake so the first decoded frame does not land mid-transition. Stage 1 of that wait blind-polls for a switch to start, and its 1000 ms budget exists for one architecture: a sole-writer host (LoadOptions.suppressDisplayCriteria = true) whose criteria write comes from AVKit's auto path, which reads dvcC off the liveAVPlayerItem.formatDescriptionand therefore fires later and more variably than the engine's synchronous pre-flight. Dolby Vision Profile 5 has no HDR10 base layer, so its first frame must not reach an SDR panel, and that budget is what makes the cold start land.Every other session paid the same 1000 ms for a write that could not arrive. Engine-writer sessions programmed their criteria synchronously before the item loads, and an HDR write was already settled by the pre-flight wait, so a second full blind poll buys nothing. SDR content reaches no dynamic-range switch at all: the only write still possible is rate-only, and the engine already declines to gate its own rate-only writes because those settle sub-second.
Both now take a 200 ms budget, the value in place before the AVKit-sole-writer architecture raised it. A sole-writer host on HDR/DV content keeps the full budget, as does a load whose source probe failed, since the range is then unknown and a DV write may still be inbound. Stage 2 is unchanged: it runs only when a switch has genuinely started, and the entry fast-exit on EDR headroom still returns immediately on a panel that is already in HDR. The
no switch started (...) after Nmslog line now names the budget it used.Reported and measured by @digilearn-dev (#274).
-
A panel switch the engine did not initiate is no longer reported as a failed HDR handshake. The settle classification treated "the engine wrote no criteria this session" as its HDR branch, so a sole-writer host's own SDR rate write, correctly ending with EDR headroom at 1.0, logged
WARN ... panel stayed SDR despite HDR criteria. The engine has no target range to compare against for a write it never made, and now says exactly that instead (#274).
Upgrading
.package(url: "https://github.com/superuser404notfound/AetherEngine", from: "6.4.3")Source-compatible, no public API change. Hosts see it as faster startup on loads where no panel mode switch was pending: up to 800 ms per load for engine-writer hosts and for SDR content on sole-writer hosts, and the same saving on the audio-track-switch reload, which preserves the criteria and re-applies none. The Dolby Vision cold-start guarantee for AVKit-auto hosts is unchanged.