-
Andrey Filippov authored
Real per-scene file I/O inside the measured loop (the honest RT test, and the production shape: 4 reader threads = the 4xSATA-2 device groups of 4 consecutive sensors). New CuasSceneFeeder parses the single-strip 16-bit TIFF layout ONCE from file #1 (strip@557, 656640 B, big-endian, telemetry row 0 - verified constant over the whole segment and bit-exact vs the production ImagejJp4Tiff reader), then preads raw strip bytes straight into the native pinned u16 staging (PosixIo/libc - the kernel's read IS the pinned write, half the pinned-write bytes of the float path). The GPU converts (byte-swap) + applies the borrowed per-scene Row/Col (prior scales snapshotted at creation, exact double chain) + two-map conditions in ONE kernel (condition_lwir_u16, native 84d7ab6) - bit-identical to the preload path by the u16_cond case, so the Done-line byte-identity gate carries over. Cold-read honesty: posix_fadvise(DONTNEED) after every file - reruns never replay the page cache (the production RAM-based dual-port SATA feeder always serves NEW frames). Cold bench: 4 threads 4.4/5.4/7.3 ms/scene p50/p95/max - hidden under the ~12 ms DP entry via the D5 overlap, which now awaits the in-flight read (kicked one scene ahead at collect-safe points, keeping the one-scene staging slack contract). Arrival moderation (Andrey 07/18): in paced (pose_pace) mode the feeder is armed with the same 60 Hz epoch grid - the DATA, not just the loop, arrives at 60 Hz; the overlap then fires only when the next read already landed (never parks inside the DP window), i.e. exactly when running behind. New saved checkbox curt.pose_feed16 (default ON) selects the feeder; OFF = the legacy float preload (A/B). CPU-oracle fallback (heap reads + the exact preload float chain) covers cond_gpu OFF and any native failure. Stage0 42/42; mvn package PASS. Co-authored-by:Claude Fable 5 <claude-fable-5@anthropic.com>
21fe0c02