Skip to content

fix(IBA): keep nearest resample off the Highway path - #5393

Open
wingfiring wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
wingfiring:fix/resample-hwy-nearest
Open

fix(IBA): keep nearest resample off the Highway path#5393
wingfiring wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
wingfiring:fix/resample-hwy-nearest

Conversation

@wingfiring

@wingfiring wingfiring commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Description

resample_hwy() ignores its interpolate argument and always bilerps, but resample_() routed nearest sampling to it whenever Highway was enabled, so ImageBufAlgo::resample(dst, src, false) returned filtered pixels instead of the source pixel the caller asked for. Measured against a 128x128 nearest resample of testsuite/common/grid.tif, 40.9% of pixels were wrong, with a maximum error of 0.608.

Latent today because enable_hwy defaults to 0, but it becomes a live behavior change as soon as Highway is turned on by default.

Also fixes an MSVC build failure in the same subsystem. The two hwy_*_perpixel_op_rgba_rgb_roi() lambdas derived a tag type with decltype(d), where d is captured from the enclosing function; MSVC yields a reference type there, and D::template Rebind cannot be named through a reference. Naming the tag directly drops the dependency on how decltype treats a captured entity, and says what the tag is rather than what it matches.

Tests

Case added: test_resample_hwy_nearest

Checklist:

  • I have read the guidelines on contributions and code review procedures.
  • I have read the Policy on AI Coding Assistants
    and if I used AI coding assistants, I have an Assisted-by: TOOL / MODEL
    line in the pull request description above.
  • I have updated the documentation if my PR adds features or changes
    behavior.
  • I am sure that this PR's changes are tested in the testsuite.
  • I have run and passed the testsuite in CI before submitting the
    PR, by pushing the changes to my fork and seeing that the automated CI
    passed there. (Exceptions: If most tests pass and you can't figure out why
    the remaining ones fail, it's ok to submit the PR and ask for help. Or if
    any failures seem entirely unrelated to your change; sometimes things break
    on the GitHub runners.)
  • My code follows the prevailing code style of this project and I
    fixed any problems reported by the clang-format CI test.
  • If I added or modified a public C++ API call, I have also amended the
    corresponding Python bindings. If altering ImageBufAlgo functions, I also
    exposed the new functionality as oiiotool options.

@wingfiring
wingfiring force-pushed the fix/resample-hwy-nearest branch 2 times, most recently from 6d0cf7a to a49e3de Compare August 10, 2026 21:27
resample_hwy() ignores its `interpolate` argument and always bilerps, but
resample_() routed nearest sampling to it whenever Highway was enabled, so
ImageBufAlgo::resample(dst, src, false) returned filtered pixels instead of
the source pixel the caller asked for. Measured against a 128x128 nearest
resample of testsuite/common/grid.tif, 40.9% of pixels were wrong, with a
maximum error of 0.608.

Latent today because enable_hwy defaults to 0, but it becomes a live
behavior change as soon as Highway is turned on by default.

Also fixes an MSVC build failure in the same subsystem. The two
hwy_*_perpixel_op_rgba_rgb_roi() lambdas derived a tag type with
decltype(d), where d is captured from the enclosing function; MSVC yields a
reference type there, and D::template Rebind<T> cannot be named through a
reference. Naming the tag directly drops the dependency on how decltype
treats a captured entity, and says what the tag is rather than what it
matches.

Signed-off-by: Jackson Sun <jackson.sun@autodesk.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant