using System.Text.Json.Serialization; namespace Jellyfin.Plugin.JRay.Models; /// /// Extraction provenance for a (SPEC.md §1, JR-002). /// /// /// These fields moved here from the top level in the SR-003 bump so that the /// truth file and the Jmanifest's extraction block have the same shape. /// They differed for no reason, and two nearly-identical shapes are what makes a /// converter quietly drop a field. /// /// There is no anneal_sec. It was withdrawn rather than retained /// as a vestigial zero: presence now follows track extent, so a track survives /// its own gaps and there is nothing to anneal (extraction AR-012/AR-013). A /// field naming a mechanism the pipeline no longer has is actively misleading, /// and would outlive everyone who remembers why it reads zero. /// /// // TRACES: JR-002 | SR-003 public class TruthExtraction { /// Gets or sets the sampling rate used during extraction. [JsonPropertyName("sample_fps")] public double? SampleFps { get; set; } /// /// Gets or sets the re-acquisition timeout that shapes window extent, in /// seconds. Successor to the withdrawn anneal_sec. /// /// /// This is what a consumer needs in order to interpret a window: it bounds /// how long an actor could be unseen without the window being closed. /// [JsonPropertyName("extinction_sec")] public double? ExtinctionSec { get; set; } /// Gets or sets the producing pipeline's version string. [JsonPropertyName("pipeline_version")] public string? PipelineVersion { get; set; } /// Gets or sets how many references the gallery held. [JsonPropertyName("gallery_size")] public int? GallerySize { get; set; } /// /// Gets or sets global or limited — the strongest single /// quality signal when two manifests compete for one cut. /// [JsonPropertyName("gallery_scope")] public string? GalleryScope { get; set; } }