Skip to content

3.11.0 — Dolby Vision Profile 7 to 8.1

Choose a tag to compare

@superuser404notfound superuser404notfound released this 18 Jun 14:11
· 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 new LibDovi xcframework. Any conversion failure falls back to HDR10 rather than rejecting the file, and the conversion is gated off for SSAI re-init. Validate with aetherctl dovitest <file>.
  • P8.2 / P10.2 / P9 base-layer playback. These profiles play their base layers instead of being rejected.
  • Intel Mac support. LibDovi ships 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 loadFailed wedge 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 terminal loadFailed and 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), and serveSegment re-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. sourceTime now tracks the actually-rendered frame on the native path while currentTime keeps scrub intent (no #37 regression). Adds the clockLeadSeconds diagnostic 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