namespace Jellyfin.Plugin.JRay.Models; /// /// Which comparison produced the offset that was applied to a fetched manifest. /// /// /// Recorded because the two are not equally strong evidence. The server has /// never seen the local file, so its offset is at best a runtime-difference /// inference; a local alignment compares the manifest's own audio signature /// against the file the windows will actually be drawn over. /// public enum AlignmentSource { /// /// The server's offset was applied — no local alignment was possible. /// /// /// Either signatures are switched off, the item is under the 120 s window, /// the manifest carried no signature, or the decode failed. A signature is /// an enhancement, so every one of those degrades to this rather than /// failing the fetch. /// Server = 0, /// /// A local audio alignment was computed and its offset was applied. /// Local = 1, /// /// A local alignment was attempted and the two signatures did not match at /// any tier; the server's offset was applied and the disagreement recorded. /// /// /// Deliberately not a failure. The audio may legitimately differ — a /// different language track, a heavy re-encode — and a signature must never /// be able to break a fetch. But it is the strongest available hint that a /// manifest describes different content, so it is surfaced as a caveat /// rather than discarded. /// LocalMismatch = 2, }