20260827 3.7.5.r4669 (pre 3.7.6)
- New array syntax: add dictionary-style ArraySet (replaces or appends)
- New array syntax: add dictionary-style ArrayDel (deletes by key, no-op if not found)
- New array syntax: add ArrayIndexOf which returns the actual index of the dictionary-style array search
See https://avisynthplus.readthedocs.io/en/latest/avisynthdoc/script_ref/script_ref_arrays.html - Fix AviSynth#505: Expr Vector-C relative-row addressing (x[dx,dy]) ignored the current row
entirely, and additionally mis-scaled the row byte offset for 16-bit/float sources. - Fix AviSynth#506: Compare 32-bit SAD/SD accumulators (8-bit packed/planar, C and SSE2/ISSE
paths) could overflow on large frames (e.g. 4K RGB32); now 64-bit unconditionally. - Fix AviSynth#507: Compare RGB24/RGB48 MAD/MD denominator divided by a hardcoded 4 (assumed
4 channels/pixel) instead of the actual per-pixel component count (3). - Fix AviSynth#508: Compare uninitialized internal mask could give non-deterministic MAD/MD
results for RGB48/RGB64. - Fix AviSynth#509: ConvertBits automatic preconversion for large dither_bits gaps (e.g.
16-bit source with dither_bits=1) silently dropped the dithering, falling back to
a plain bit-depth expansion. - Fix AviSynth#510: Layer "Mul" raw multiply product used a plain bit shift instead of the
existing MagicDiv, so near-max products came out one unit too low (e.g. 255*255 -> 254). - Fix AviSynth#511: ConvertYUV444ToRGB/ConvertRGBToYUV444 left the synthesized alpha plane
uninitialized when converting an alpha-less source to an alpha-carrying target. - Fix AviSynth#512: "Overlay" masked "add"/"subtract"/"darken"/"lighten"/"difference"/"exclusion"/
"softlight"/"hardlight" a fully-opaque mask did not reproduce the same result as omitting the mask.
As a side effect, also added finer opacity-granularity over 8 bits at integer formats. - Fix: ArrayIns/ArraySet/ArrayDel: bounds check the index parameter(s) (preventing Access Violation)
- Fix/optimize: avs/minmax.h content now is force-inlined, since MSVC placed a function call for them!
(checked with actual disassembly).
Plus: wrap min/max/clamp in an anonymous namespace to prevent a theoretical translation unit mismatch across archs
(e.g. when SSE2/AVX2/AVX512 specific .cpp files are built with different per-file compiler flags).
Part of our public headers, but no interface change was done. - various memory related fixes (msg7086)
- fix various regressions (to be detailed later)