Replaces the v1 shape rather than accepting both. `anneal_sec` and the top-level `sample_fps` are deleted, not zeroed; `extraction` and `cut` blocks arrive; `scenes` become objects carrying belief and route, so a window records how far to trust it instead of being a bare float pair. `TruthSchema.IsSupported` is the single gate and is applied on all four read paths — sidecar, managed store load, managed PUT, and converted manifest. Previously only the controller checked, so the version the plugin claimed to require and the one it would actually parse were free to drift. Rejections name the file and the version found, so an item that looks empty is distinguishable from one that was refused. `ManifestConverter` carries belief, route and both provenance blocks through: dropping them would silently downgrade every fetched manifest against a locally extracted one. TRACES: JR-002, JR-003 | SR-003
36 lines
1.2 KiB
C#
36 lines
1.2 KiB
C#
using System.Text.Json.Serialization;
|
|
|
|
namespace Jellyfin.Plugin.JRay.Models;
|
|
|
|
/// <summary>
|
|
/// Which encode the timings in a <see cref="TruthFile"/> apply to (SPEC.md §1,
|
|
/// JR-002).
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Timings are only meaningful against a particular cut. Recording the runtime
|
|
/// they were measured from is what lets a consumer notice that a file has been
|
|
/// re-encoded, re-trimmed, or replaced with a different release — rather than
|
|
/// silently showing an actor twenty seconds late.
|
|
/// </remarks>
|
|
// TRACES: JR-002 | SR-003
|
|
public class TruthCut
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the decoded duration the timings came from, in seconds.
|
|
/// </summary>
|
|
[JsonPropertyName("runtime_sec")]
|
|
public double? RuntimeSec { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the version-prefixed spectral-peak audio signature, or
|
|
/// <c>null</c> when the producer emitted none.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Carries its own <c>v1:</c> prefix so a DSP change is detectable rather
|
|
/// than silently non-matching (JR-045). Media shorter than 120 s carries no
|
|
/// signature at all (JR-044).
|
|
/// </remarks>
|
|
[JsonPropertyName("audio_signature")]
|
|
public string? AudioSignature { get; set; }
|
|
}
|