github pinterf/AviSynthPlus v3.7.6pre-r4726
Avisynth+ v3.7.6pre-r4726 test build

pre-releaseone hour ago

For online documentation check https://avisynthplus.readthedocs.io/en/latest/

Actual:
https://avisynthplus.readthedocs.io/en/latest/avisynthdoc/changelist376.html

20260928 3.7.5.r4726 (pre 3.7.6)

  • Fix AviSynth#519: C API filters running as MT_NICE_FILTER: concurrent calls on the same filter instance
    shared the wrapper's error fields. Thus there was a possibility that errors could be lost or reported
    for the wrong frame, or vice versa, raised for a frame that was otherwise O.K.
    Now each call gets its own copy of the filter info.
  • Fix AviSynth#495 (debug builds only): VideoFrame::CheckMemory() ignored the allocation margin and
    reported a buffer overrun for every frame.
  • Fix AviSynth#495 POSIX debug builds failed to compile (now forwards the error to stderr).
  • Fix AviSynth#523: C++ API (AVS_Linkage), interface V13 regression (r4721 test build):
    • new V13 VideoInfo entries were added but without shrinking the reserved area (GetNeoEnv moved by 4 pointers)
    • Plugins built with the V13 header called the new VideoInfo functions through null entries
      when used against older runtimes. Now the linkage call macros also check the entry for null

20260928 3.7.5.r4721 (pre 3.7.6)

  • ConvertBits: source range (_ColorRange) is now detected per frame when "fulls" is not given, instead
    of being fixed once from frame 0 at filter creation. Fixes AviSynth#516: the frame#0 request during filter
    creation could hide an error message/exception raised by an upstream filter.
    • Use case: e.g. spliced clips with different _ColorRange flags; ConvertBits no longer calls GetFrame(0)
      during script evaluation.
    • "fulld" omitted: mirrors each frame's source range; "fulld" given: output range is pinned.
    • "fulls" given explicitly: classic fixed-range behavior.
    • Same bit depth with "fulls"/"fulld" omitted (e.g. ConvertBits(16) on a 16-bit clip) still returns
      the clip unchanged.
    • Internal ConvertBits calls (ConvertToRGB/YUV "bits", VfW export bit-depth mapping) benefit as well.
    • Fix (could be reached only from this new per-frame mode): same-bit-depth limited->limited integer
      conversion (C/SSE4.1/AVX2) computed an invalid shift and misread 8-bit data; 32-bit float
      same-range conversion added rounding noise. Both are now plain pixel copies.
  • New formats: YUV(A) 4:4:0 and 4:1:0 (8-32 bits), 4:1:1 over 8 bits, Y+alpha (YA, 8-32 bits).
    • ConvertToYUV(A)440, ConvertToYUV(A)410, ConvertToYUV(A)411 (all bit depths), ConvertToYA.
    • Internal filters support the new formats (Is411() replaces the 8-bit-only IsYV411() checks);
      Layer, Overlay, Text/Subtitle: 4:1:0 and 4:4:0 support; Text/Subtitle: 4:1:1 "left" placement.
    • Overlay: YA support; YUVA/YA "output" keeps (or adds) alpha instead of dropping it.
    • ColorBars: 4:1:0 and 4:4:0 support. ImageReader: 8-bit YUV440 and YUV410.
    • AviSource: YVU9, I410, I411, I440 input (410/440 new, alternative 411 FourCC).
    • VfW export: YUV410 as YVU9, YUV440 as I440; 8-bit YA as Y2[0][8] (interleaved Y,A like ffmpeg's YA8);
      high bit depth 411/410/440 silently down-converted to 8 bits.
    • BuildPixelType: 440/410/YA support.
    • Added "YUV410"/"YUVA410" to the allowed 8-bit format strings, and FFmpeg-style alternate names for
      32-bit float formats (e.g. YUV420PF32, RGBPF32, YF32, YAF32).
  • Fix AviSynth#518: "Mask" on RGB32 clips narrower than 4 pixels: the SSE2/AVX2 code wrote 16 bytes starting
    before the row (memory corruption before the frame buffer).
  • Fix AviSynth#520: Possible access violation on script environment destruction when a frame held another frame
    as a frame property depending on internal frame registry ordering.
  • Bump interface version to v13 (new video format constants).
  • Fix: ConvertBits: ordered dither on packed RGB48/RGB64 with dither_bits 1-7 (bit-depth gap over 8)
    failed with "truerange specified for non-planar source". The packed->planar conversion used for
    dithering now happens before the automatic pre-conversion step, so the whole dither chain runs planar.
  • rstdoc: add BuildPixelType page; update filter docs for YA; document ConvertBits per-frame range
    handling and its dither helper conversions; document AcquireGlobalLock/ReleaseGlobalLock better (AviSynth#444).
  • Fix test version regressions (3.7.6 not yet released):
    • Overlay: masked blend (greymask=false, native non-4:4:4) read the chroma mask at luma resolution
      (access violation).
    • AVX-512 horizontal resampler (16-bit output): up to the last 31 pixels of a row were left unwritten
      for certain widths (seen in 410->444 chroma upscaling).
    • Fix AviSynth#514: Layer op="mul" ignored the overlay's alpha mask when not using full opacity.
      (regression since r4589 test).
  • Fix: TurnLeft/TurnRight: the mod alignment check for sources with different horizontal and vertical
    chroma subsampling (4:2:2, 4:1:1, and the new 4:4:0) tested the source dimensions instead of the
    post-turn ones (e.g. 4:2:2 needs a mod-2 source height, which becomes the width), so invalid clips
    passed and wrong error messages were shown. Pre-existing bug.

Don't miss a new AviSynthPlus release

NewReleases is sending notifications on new releases.