The port recomputed the publisher splash's widest keyframe-free gap as 190 units against my 8 and said one reading must be wrong. Mine was, and the library was never wrong -- only my invocation. From the file: entry 10's union of times is [0,15,30,45,235,239,251,255], widest gap 190, and settle_window() returns Some((45,235)). Entry 11 gives 145. Both match the port exactly. The cause is that screen render --build N takes a BUILD ORDINAL. screen list says [10] entry 12 and [11] entry 15; the splashes are entries 10 and 11 and are not screen builds at all, so my --build 10/11 rendered the LOADING screens. This is the foot-gun HANDOFF already documents, which the port caught months ago in the mirror direction. Three retractions: 1. 'Width does not predict quality' -- withdrawn. It rested entirely on the splashes being width 8 while winning 75x. They are the widest of the five, so width and mid-ramp are perfectly confounded across every screen either of us has measured and the width hypothesis is NOT refuted. 2. 'My filter excluded the splashes' -- withdrawn; at 190 and 145 they were never near the 10-unit cutoff. The other half stands: it admitted the 10-19 bucket, the worst at 45.1 %. 3. The splash rows of settle-vs-rest-against-captures -- void. They scored loading-screen renders against splash captures. I discarded them for a railed gamma fit; the real reason is that they were the wrong screens, and the railing was that mismatch surfacing where my instrument could report it. Surviving: the title row (ordinal 4 = entry 4) and the disc-wide censuses, which iterate pak entries directly and never touch the ordinal path. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
28 lines
1.5 KiB
Rust
28 lines
1.5 KiB
Rust
//! Where does `settle_window()`'s answer come from? The port agent recomputes the
|
|
//! publisher splash's widest keyframe-free gap as 190 units; `--settle` reports 8.
|
|
//! One of the two readings is wrong and the file settles it.
|
|
//! cargo run -p sylpheed-formats --example settle_window_check -- <build>
|
|
use sylpheed_formats::{pak::PakArchive, ui_layout};
|
|
use std::path::PathBuf;
|
|
fn main() {
|
|
let b: usize = std::env::args().nth(1).unwrap_or("10".into()).parse().unwrap();
|
|
let root = PathBuf::from(std::env::var("SYLPHEED_DISC").expect("SYLPHEED_DISC"));
|
|
let ar = PakArchive::open(root.join("dat/GP_TITLE.pak")).expect("GP_TITLE");
|
|
let by = ar.read(&ar.entries()[b]).expect("entry");
|
|
let build = ui_layout::parse_build(&by).expect("parse");
|
|
println!("entry {b}: {} elements", build.elements.len());
|
|
for el in &build.elements {
|
|
let ts: Vec<String> = el.keyframes.iter()
|
|
.map(|k| k.time.map(|v| v.to_string()).unwrap_or("-".into())).collect();
|
|
println!(" {:26} [{}]", el.name, ts.join(" "));
|
|
}
|
|
let mut ts: Vec<u32> = build.elements.iter()
|
|
.flat_map(|e| e.keyframes.iter().filter_map(|k| k.time)).collect();
|
|
ts.sort_unstable(); ts.dedup();
|
|
println!("\nunion of all element keyframe times: {ts:?}");
|
|
let gaps: Vec<(u32,u32,u32)> = ts.windows(2).map(|w| (w[1]-w[0], w[0], w[1])).collect();
|
|
let mut g = gaps.clone(); g.sort_by(|a,b| b.0.cmp(&a.0));
|
|
println!("widest gaps: {:?}", &g[..g.len().min(4)]);
|
|
println!("settle_window() reports {:?}", build.settle_window());
|
|
}
|