Skip to content

refactor(interop): re-vendor Pelorus at the commit that clears its clang-tidy findings (ADR-1113) - #2197

Merged
lusoris merged 5 commits into
masterfrom
rc3-revendor-pelorus-2
Oct 5, 2026
Merged

lusoris merged 5 commits into
masterfrom
rc3-revendor-pelorus-2

Conversation

@lusoris

@lusoris lusoris commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Re-vendors the Pelorus interop mirror at VMAFx/pelorus 5f5614b0229d (#78, merged after its seven required checks passed), which clears the 59 clang-tidy findings the VMAFx profile reports on the mirrored sources at their origin. scripts/sync-pelorus-interop.sh --update rendered the ten files; the drift check reports OK ... (ABI 1.3, minor=3). No behaviour or ABI change.

Type

  • refactor — no behaviour change

Checklist

  • Commits follow Conventional Commits.
  • Lint: the ten files are byte-identical renders of the pinned object; pre-commit hooks pass.
  • Tests: scripts/sync-pelorus-interop.sh /home/kilian/dev/vmafx/pelorus drift check OK; test_pelorus_interop is the same conformance fixture split into helpers.
  • No SIMD or GPU code path changed; no score moves.
  • New files carry SPDX headers.
  • Not breaking.
  • ADR: none needed (ADR-1113 covers the mirror).

Bug-status hygiene

  • No bug opened or closed.

Netflix golden-data gate

  • I did not modify any assertAlmostEqual(...) score in the Netflix golden Python tests.

Deep-dive deliverables

  • Research digest — no digest needed: trivial.
  • Decision matrix — no alternatives: only-one-way fix (fix at the source, re-vendor).
  • AGENTS.md invariant note — no rebase-sensitive invariants beyond the rebase note.
  • Reproducer / smoke-test command — below.
  • CHANGELOG fragment — changelog.d/changed/pelorus-revendor-tidy-clean.md.
  • Rebase note — docs/rebase-notes.md, "Pelorus re-vendor at the tidy-clean commit".

Reproducer

scripts/sync-pelorus-interop.sh /path/to/pelorus   # expect OK, ABI 1.3

Breaking changes / migration

None.

…ing a frame twice (#2206)

* fix(model): read a model collection's stored score instead of predicting a frame twice

vmaf_score_at_index_model_collection() predicted every member model and
wrote the members' and the four named bootstrap scores of the frame into
the feature collector, which refuses a second write of a frame. A second
per-frame call of a frame, or vmaf_score_pooled_model_collection() over a
range holding a frame already scored per frame (its loop predicts every
frame of the range again), therefore failed with -EINVAL ("feature ...
cannot be overwritten"). No score was wrong; the call failed.

A frame whose four named bootstrap scores are already in the collector
now returns them, as vmaf_score_at_index() reads a single model's stored
score first. The values are the first prediction's, bit for bit, so a
pooled score equals a fresh session's. Upstream Netflix/vmaf has the same
code.

test_model_collection_score_repeat fails on master without the fix: the
second per-frame call and the pooled call after a per-frame call both
return -EINVAL. Golden gate 280 passed, 3 skipped.
…t index of vif_tools.c (#2204)

* fix(feature): refuse a float_vif or SpEED prescaled plane past the int index of vif_tools.c

vif_tools.c indexes a plane as y * stride + x in int. With vif_prescale or
speed_prescale above about 1.414 at the 32768x32768 picture cap the
prescaled plane passes INT_MAX samples, the index overflows and the
resamplers write outside the plane (16K stays inside at every accepted
prescale, up to 4.0). vif_plane_fits_int_index() in vif_tools.h is now
checked by float_vif's init (init_scaled_plane()), speed.c's
speed_init_dimensions() and speed_internal_init_dimensions(), the geometry
of every SpEED device twin; such a plane fails init with -EINVAL before any
allocation. No accepted input and no score changes.

T-PRESCALED-PLANE-INT-INDEX-2026-10-05. Found by the RC3 accumulator audit.
test_prescaled_plane_int_index fails on master's SpEED geometry.
* fix(dnn): preserve explicit int8 paths in session open

When vmaf_dnn_session_open() was called with an explicit .int8.onnx path,
resolve_load_path() lacked the kInt8Suffix early return present in
dnn_attach_api.c, causing it to append a redundant .int8 suffix and
derive <name>.int8.int8.onnx before falling back to the fp32 path.

Preserve explicit int8 paths directly by returning 0 when the onnx_path
already ends in kInt8Suffix, matching the behavior in dnn_attach_api.c.

Closes T-DNN-SESSION-INT8-EXPLICIT-PATH-2026-10-05.
…samples do not wrap (#2200)

* fix(simd): take sad_avx512's differences in unsigned lanes so 16-bit samples do not wrap

sad_avx512() formed each sample difference with _mm512_sub_epi16 and
_mm512_abs_epi16, in signed 16-bit lanes: 16-bit samples that differ by more
than 32767 wrapped (65535 against 0 gave 1) and the vector columns disagreed
with the scalar tail. The difference is now max_epu16 minus min_epu16, exact
for every 16-bit pair; 10-bit results are unchanged. Only
test_motion_avx512_parity calls the function, so no score changes.

T-SIMD-SAD-AVX512-INT16-DIFFERENCE-2026-10-05. Found by the RC3 accumulator
audit. The two new 16-bit cases fail on master's kernel.
…ang-tidy findings (ADR-1113) (#2197)

* refactor(interop): re-vendor Pelorus at the commit that clears its clang-tidy findings (ADR-1113)
@github-actions github-actions Bot added the type:refactor Internal refactor label Oct 5, 2026
@lusoris
lusoris force-pushed the rc3-revendor-pelorus-2 branch from d2e617b to 550d099 Compare October 5, 2026 23:12
@lusoris
lusoris merged commit 550d099 into master Oct 5, 2026
3 of 31 checks passed
@lusoris
lusoris deleted the rc3-revendor-pelorus-2 branch October 5, 2026 23:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:refactor Internal refactor

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants