Say which placement strategy a title got

Whether a title was placed by the seam plan or fell back to inference is
the single most useful fact about a branched rip, and it was invisible.
The two looked identical in the output, so telling them apart meant
rebuilding and re-ripping — which is exactly what it cost to find that
most branched discs were silently on the inference path.

Log both flags once at plan construction, and log each refusal with the
reason that caused it.
This commit is contained in:
Matthew Jackson
2026-08-07 02:01:47 -07:00
parent e5f92e591a
commit afa0a213d6
+24
View File
@@ -213,6 +213,11 @@ impl SeamPlan {
let in_ns = mpls_ticks_to_ns(c.in_time); let in_ns = mpls_ticks_to_ns(c.in_time);
let out_ns = mpls_ticks_to_ns(c.out_time); let out_ns = mpls_ticks_to_ns(c.out_time);
if out_ns <= in_ns { if out_ns <= in_ns {
tracing::info!(
target: "freemkv::mux",
in_ns, out_ns,
"no seam plan: a clip's marks are empty or inverted"
);
return None; return None;
} }
// Inferring a clip from a timestamp assumes the marks are points on // Inferring a clip from a timestamp assumes the marks are points on
@@ -240,6 +245,11 @@ impl SeamPlan {
&& in_ns <= prev.in_ns && in_ns <= prev.in_ns
{ {
if !spans_trusted { if !spans_trusted {
tracing::info!(
target: "freemkv::mux",
"no seam plan: the clips restart their clock and the feed \
spans cannot be trusted, so nothing can place them"
);
return None; return None;
} }
marks_orderable = false; marks_orderable = false;
@@ -252,6 +262,20 @@ impl SeamPlan {
}); });
cum = cum.saturating_add(out_ns - in_ns); cum = cum.saturating_add(out_ns - in_ns);
} }
// Which of the two placement strategies a title got is the single most
// useful fact about a branched rip, and until now it was invisible: a
// title that fell back to inference looked exactly like one the plan
// handled, and telling them apart meant rebuilding and re-ripping.
// Both flags, once, at plan construction.
tracing::info!(
target: "freemkv::mux",
clips = out.len(),
spans_trusted,
marks_orderable,
total_ns = cum,
"seam plan built"
);
Some(Self { Some(Self {
spans_trusted, spans_trusted,
marks_orderable, marks_orderable,