3.11.0 — Dolby Vision Profile 7 to 8.1
·
20 commits
to main
since this release
Live Dolby Vision Profile 7 to 8.1 conversion lands, alongside wider DV base-layer coverage, Intel Mac support, and two loopback-HLS playback fixes (#49, #50).
Added
- Live Dolby Vision Profile 7 to 8.1 conversion. P7 sources (dual-layer BL+EL+RPU, the common Blu-ray remux profile Apple platforms cannot decode natively) now play. The base layer is routed as 8.1 and the RPU is rewritten live via
DoviRpuConverter, backed by libdovi shipped as the newLibDovixcframework. Any conversion failure falls back to HDR10 rather than rejecting the file, and the conversion is gated off for SSAI re-init. Validate withaetherctl dovitest <file>. - P8.2 / P10.2 / P9 base-layer playback. These profiles play their base layers instead of being rejected.
- Intel Mac support.
LibDoviships x86_64 fat binaries (macOS and iOS Simulator) as of 1.0.2, so AetherEngine cross-builds for x86_64. (1.0.1 added the iOS slices missing from 1.0.0.)
Fixed
- Loopback-HLS 404
loadFailedwedge after a rapid seek burst (#50). On the engine-native loopback path, an in-range VOD segment (index < segmentCount) evicted from the rolling window while the single producer was positioned elsewhere was answered with a 404, which AVPlayer treats as a terminalloadFailedand aborts the session. The root cause (confirmed by @rrgomes' on-device trace) is twofold: the #35 restart coalescer keeps a single pending slot, so a newer scrub position can orphan an earlier still-blocked reposition; and a regenerable in-range segment should never be a 404 in the first place. The server now returns a retriable 503 + Retry-After for in-range misses (404 stays for genuinely out-of-range indices), andserveSegmentre-asserts the reposition across bounded waits instead of orphaning it. Thanks @rrgomes for the precise N-vs-segmentCount capture that overturned the original forward-unproduced hypothesis. - Subtitles raced ahead of the picture during post-seek rebuffer (#49). Under a sustained seek rate the published clock held the optimistic seek target while AVPlayer stayed parked at the pre-seek frame, so subtitles (which read
sourceTime) led the on-screen image.sourceTimenow tracks the actually-rendered frame on the native path whilecurrentTimekeeps scrub intent (no #37 regression). Adds theclockLeadSecondsdiagnostic for on-device validation.
Notes
#49 and #50 are verified off-device (unit tests + the aetherctl seektest harness); the rebuffer-stall window that triggers the 503 path cannot be reproduced headless, so on-device confirmation by @rrgomes remains the acceptance gate for both. Both issues stay open pending that.
Full changelog: 3.10.0...3.11.0