Teevo's copy of AetherEngine

Upstream: AetherEngine by superuser404notfound, revision 2bf50c5e03af008059d30586661ac31029d34755
(https://github.com/superuser404notfound/AetherEngine). Licensed under the
GNU Lesser General Public License 3.0 with an additional permission for
application stores; see LICENSE.

This copy is modified. Changes made by Amberlake for Teevo:

9 October 2026, 0001-av1-registration-on-macos-only.patch:
  Sources/AetherEngine/Video/VTCapabilityProbe.swift registers Apple's AV1
  supplemental decoder on macOS only. The tvOS and iOS 26.1 SDKs mark that
  call unavailable, so it could not be built for Apple TV or iPhone. On
  those devices AV1 is decoded in software (dav1d).

20 October 2026, 0002-seeks-restart-a-slow-march.patch:
  Sources/AetherEngine/Video/SegmentCache.swift times how long the producer
  takes to make each segment; Sources/AetherEngine/Video/VideoSegmentProvider.swift
  restarts the producer at a seek's segment when its march would take longer
  than 2.5 s to get there, instead of waiting for it, and
  Sources/AetherEngine/Video/HLSVideoEngine.swift tells it a seek is coming.
  On a big film over a modest line a press forward used to leave the picture
  still for many seconds.

20 October 2026, 0003-audio-server-calls-off-the-main-actor.patch:
  Sources/AetherEngine/Audio/AudioOutput.swift makes its clock rate changes,
  flushes and video renderer attach and detach on one serial queue: from
  the main thread without waiting, from others waiting as before, in order;
  enqueue waits behind them. Sources/AetherEngine/Native/SoftwarePlaybackHost.swift
  and Sources/AetherEngine/Audio/AudioPlaybackHost.swift make their AudioOutput
  off the main actor, and the software seek releases its demux loop once the
  queued calls have run. These calls wait on the audio server, and on the
  main thread they froze the interface while the picture played on.

20 October 2026, 0004-item-hand-overs-off-the-main-actor.patch:
  Sources/AetherEngine/Native/NativeAVPlayerHost.swift hands AVPlayer its item
  (replaceCurrentItem, the next one or nil) for a load or a teardown on one
  serial queue, in order, with the mount seek after it, and reads an item's
  tracks and duration off the main actor. Sources/AetherEngine/AetherEngine+Loading.swift
  waits for the hand-over without blocking before it reads the item again, and
  Sources/AetherEngine/AetherEngine.swift reads the tracks off the main actor for
  its frame-rate check. These wait on Apple's media server, and on the main
  thread a sound-track change froze the interface while the picture played on.

Each change is also marked in the file it changes, and published on its own
as a patch at https://amberlake.co.uk/teevo/source/.

Packed 19 October 2026.
