Skip to content

Releases: AviSynth/AviSynthPlus

AviSynth+ 3.7.5

21 Apr 12:53
6c7c266
Compare
Choose a tag to compare

Hotfix release for YtoUV and non-x86 platforms

  • CMakeLists.txt: if CMAKE_BUILD_TYPE isn't set, use Release
  • Update build.yml, retire unsupported 20.04, add 24.04
  • Fix an llvm syntax warning.
  • rstdoc: update change log
  • Bump to IF v11.1: Fix AVS_Value 64 bit data member declaration for 64 bit non Intel (X86_X64) systems.
  • rstdoc: open 3.7.5 change log, add Raspberry pi stuff to posix.
  • Fix gcc compilation warning
  • Fix: resizer crash for non-intel (e.g. aarch64), regression in 3.7.4
  • Fix #434: YtoUV crash, regression since 61d2c9a
  • Add pkgconf->cmake detection fallback message for SoundTouch
  • avisynth+_arm64.iss: assorted fixups
  • plugins/CMakeLists.txt: fix VDubFilter build check
  • Remove upx.exe from the source tree

Legend:
_arm64 = Native build for Windows on ARM (e.g. Snapdragon X/X Plus/X Elite laptops)
_vcredist = Includes the MSVC 2019 Redistributable
_xp = Can be used on Windows XP
-filesonly = Only the library and plugins themselves, no installer.
.pkg = Installer for macOS

If you're unsure of which to download, pick AviSynthPlus_3.7.5_20250420_vcredist.exe

AviSynth+ 3.7.4

24 Mar 19:30
424707f
Compare
Choose a tag to compare

Additions and changes:

  • Bump year to 2025

  • AddBorders and LetterBox: add transient filtering See :doc:AddBorders <corefilters/addborders>.

  • new filter: MultiOverlay. Bulk copy-paste from clips. See :doc:MultiOverlay <corefilters/multioverlay>.

  • Animate: Custom function option. See :doc:Animate <corefilters/animate>.

  • Animate: more precise granularity for integer interpolation, allow 64 bit input

  • Animate: add proper rounding for integer interpolation

  • Resizers: add "force" integer parameter to force the resizing process even if Avisynth decides it is not needed

  • Resizers: respect _ChromaLocation, and "placement" parameter which to adjust chroma locations during resizing

  • Resizers: add "keep_center" parameter to disable pixel center position adjustments

  • Resizers: allow arbitrary dimensions; the filter "support" size does not limit usability, no more
    "image height is too small for this resizing method"-like error messages.

  • GaussResize: add "b" and "s" parameters See :doc:Resize Filters <corefilters/resize>.

  • DirectShowSource new parameter utf8 for utf8 filename support

  • "propShow" font, text_color, halo_color, bold new parameters for custom style.

  • "propShow" (#366): x, y, align new parameters for custom positioning.

  • "propShow" props new parameter for filtering the name of property list with wildcard and regex support.

    See :doc:propShow <corefilters/propShow>.

  • "propDelete" and "propCopy": props accepts wildcard and regex for filtering the name of property list.

    See :doc:Internal functions: frame properties <syntax/syntax_internal_functions_frame_properties>.

  • "Info": cpu new parameter to disable showing CPU capabilities

  • "Info" (#366): x, y, align new parameters for custom positioning

  • Fix #368 Make proper vertical alignment for multiline text in Subtitle and Text
    when vertical alignment is set to bottom or center.

  • Studio RGB (narrow, limited) range will now be recognized (through _ColorRange=1)
    and utilized in conversions to and from RGB, such as in GreyScale, ConvertToY, ConvertToYUVxxx,
    or ConvertToRGB32 with PC.xxx matrix which now keeps the limited/narrow-rangeness of the source.
    See also BugFix section.

  • #392 "break" and "continue" in for-next and while loops

  • Add "ArraySort" for sorting simple bool, numeric or string arrays

  • SoundTouch: Increased the max number of channels to 32ch from the old limit of 16ch.

  • Posix: Detect additional plugindirs from LD_LIBRARY_PATH environment variable

  • #413 Add ListAutoloadDirs() script function returing a LF delimited string with directory list.

  • SubTitle to accept real LF (\r) or CR LF (\r\n) control characters for line break.

  • #422 Give meaningful and stopping error message when a bad C++ plugin is throwing exception
    during autoload (e.g. wrong function signatures, crash because of using unsupported interface calls).
    This kind of loading error is treated similarly fatal like mixing 32 and 64 bit plugins.

  • #413 Add 64 bit data types (#423)

    • (technical) Value (AVSValue) types i and f are kept and still mean 32 bit integer and float values.

    • (technical) New value types l and d added to mark 64 bit integer and double types.

    • Integer decimal constants are automatically promoted to long (int64_t) if they do not fit into integer.
      Integer decimal constants are automatically promoted to 64 bit double if they do not even fit into a 64 bit long.
      (But values stored as 'only' integers behave as 64 bit long in math operations).

    • New syntax element L (or l) suffix for hexadecimal constants for interpreting 64 bit data ($800000001010L)
      Hexadecimal literals without L suffix still remain 32 bit integers. This ensures compatibility so that
      color constants exceeding $7FFFFFFF (such as $FFFFFFFF) are still interpreted as 32-bit
      integers and not as 64-bit long integers.

    • Floating point constants (literals) stored as 64 bit double (formerly only with 32 bit float precision)

    • IsInt() returns true for any 32 or 64 bit integer

    • IsLongStrict() returns true only if underlying variable is long (64 bit integer)

    • IsFloat() returns true for any 32 or 64 bit floating point content (float or double and for any integers - as before)

    • IsFloatfStrict() returns true only if value is exactly a 32 bit single-precision float.

    • Float() by default casts to double, but 32-bit floating point numbers are kept in 32-bit float format
      (no automatic float-to-double conversion).

    • New Double() converts always to 64 bit double

    • New Floatf() converts always to 32 bit float

    • New Long() converts always to 64 bit long

    • New IntI() converts always to 32 bit integer

    • Function Pi returns real double precision constant.

    • VersionNumber() still returns a 32-bit float, but the exact value is adjusted slightly for compatibility
      reasons. This is because the script constant 2.6 is now stored in 64-bit double precision, which can cause issues when
      compared to a 32-bit float version of 2.6. For example, to ensure 2.6 (double) >= 2.6f (float) and
      avoid breaking scripts that contain IsAvs26 = VersionNumber() >= 2.6 .

    • Floating point mathematical functions (Sin, etc..) return double precision results.

    • Floating point arithmetic (addition, subtraction, multiplication, division) uses double precision, except when both operands
      are 32-bit floats, in which case the result is also a 32-bit float.
      (32-bit float / 32-bit float results in a 32-bit float)

    • Integer mathematical operation operate on 64 bit data.
      When result is within a 32 bit integer range, it is stored as 32 bit integer internally, which is
      automatically promoted to 64 bit long if needed.

    • For-loops are using 64 bit integer for initial value, step and end-value.

    • Animate: using 64 bit precision inside.

    • Bit-related functions now have distinctly named 64-bit integer versions, while the old ones continue to work with plain 32-bit integers.

      • BitAnd64, BitNot64, BitOr64, BitXor64,
      • bitshl64, bitsal64: shift left (providing two versions; though arithmetic and logical is the same)
      • bitshr64, bitsar64: shift right logical and arithmetic
      • bitrol64, bitror64: 64 bit rotation left and right
      • BitChg64, BitClr64, BitSet64, BitTst64, change, clear, set, test
      • bitsetcount64 counts the set bits (or sum of set bits) of one or more parameter values.
    • New: HexValue64() for 64-bit long result. The original HexValue() keeps returning 32 bit integer
      so HexValue("FFFFFFFF") is still -1, but HexValue64("FFFFFFFF") will be 4294967295 (64 bit number)

    • Integer and float frame property read and writes work on real 64 bit integers and doubles.

    • Formatting functions (String(), etc.) to 64 bit data type aware.

    • AudioLength() now returns 64 bit integer

    • AudioLengthF() returns data to double instead of 32 bit float (though it's now useless and still can lose precision).

    • Function parameter types (function signature) keep i and f, but accept 64 bit long and double
      precision parameters transparently.

    • String length can exceed the value of a 32 bit int. StrLen() returns long if int cannot hold the length.
      LeftStr, RightStr, MidStr length parameters accept 64 bit long values.

    • Compatibility: 64 bit parameter values are automatically replaced with 32 bit int and 32 bit float if Avisynth 2.5 or
      old (pre-V11, non-64-bit aware) C interface is detected. Such plugins will see the good old 32 bit data.

    • Backport the frame property changes from VapourSynth API4

      • new saturated frame property getters on API returning only 32 bit data: propGetIntSaturated and propGetFloatSaturated
      • A frame property with data type can hold a string or real binary data.
        To distinguish between the two kinds, a hint can be set with a new API version of propSetDataH, which helps visualizing and later: exporting.
      • propShow displays binary buffer instead of string if the internal subtype is set to Binary.
        The buffer length and the first (up to) 16 bytes are displayed like this: Binary data. Length= xx [00,01,DD, ...]
        A string content is displayed otherwise.
      • Since propSet script function in Avisynth is string-only, it sets the hint to DATATYPEHINT_UTF8
        (utf8 just hinting that this is a string)
  • WinInstaller: add InnoSetup script for Windows on ARM

  • buildsystem: restrict use of MSVC to x86(-64) only

  • avs/config.h: add defines to separate X86 and ARM Windows variants

  • PluginManager: only enable +GCC plugindir registry entries on X86

  • PluginManager: indent cosmetics for clarity

  • Restore AVS_VERSION define

Build environment and Interface:

  • add LOONGARCH support
  • Use system installs of DevIL and SoundTouch on all platforms, remove in-tree binaries/code
  • avisynth.h: add ListAutoloadDirs() to internal interface declarations
  • CMakeList.txt to accept Intel C++ Compiler 2025
  • V11 interface: new 64 bit related AVSValue get and set function in C++ and C interface.
  • V11 interface: C Interface: implement API for all getter/setter/typecheck for AVS_Value
  • V11 interface: C interface supports Avisynth+ deep-copy dynamic arrays.
  • Added optional C plugin init function: to enable full 64 bit data to C plugins, they should implement avisynth_c_plugin_init2.
  • V11: C interface add avs_add_function_r as an alternative to avs_add_function, allowing the callback
    to return the result via a by-reference AVS_Value parameter instead of returning the AVS_Value as a struct....
Read more

AviSynth+ 3.7.3

16 Jul 05:01
Compare
Choose a tag to compare
  • Add "bold"=true (linux/NO_WIN_GDI: false), "italic"=false, "noaa"=false parameters to
    "ShowFrameNumber", "ShowCRC32", "ShowSMPTE", "ShowTime" filters.
    As noted below, "italic" and "noaa" parameters are ineffective in NO_WIN_GDI builds (e.g. Linux)

  • Add "noaa" parameter to SubTitle and Info. Setting it true will disable antialiasing.
    Useful when someone would use "VCR OSD Mono" as-is, without beautifying the outlines,
    as it as mentioned in https://forum.doom9.org/showthread.php?t=184627

  • Address #358, plus "noaa"

    • add "bold", "italic" and "noaa" boolean parameters to "SubTitle" and "Info"
    • add "italic" and "noaa" boolean parameter to "Text" ("bold" already existed)
      "italic" and "noaa" is provided only to match the parameter list with SubTitle.

    SubTitle: to mimic former working method, defaults are "bold"=true, "italic"=false, "noaa"=false
    Text: "bold"=false (as before); "italic" is not handled at all, either true or false, it does not affect output.
    "italic" and "noaa" parameters exist only because on non-Windows systems "Subtitle" is aliased to "Text"
    (Each Subtitle parameter must exist in "Text" as well)

  • Fix #360: plane fill wrongly assumed that pitch is rowsize, which is not the case after a Crop
    It would result in crash e.g. in HistogramRGBParade

  • Enhancement: much quicker YV24 to RGB32/RGB24 conversion when AVX2 instruction set is supported. (+50% fps at i7-11700)

  • UserDefined2Resize got an 's' parameter (to the existing b and c): support, default value = 2.3
    (following DTL2020's addition in jpsdr's MT resizer repo, UserDefined2ResizeMT filter)

    Now, as we have already three variable parameters to the optional chroma resamplers in ConvertToXX
    converters, ConvertToXX family got a new float 'param3' parameter which is passed to UV resizer as
    's', if "userdefined2" is specified as chroma resampler.
    If param3 is not used in a resizer but is defined, then it is simply ignored.
    Such as "ConvertToYV24" parameter signature: c[interlaced]b[matrix]s[ChromaInPlacement]s[chromaresample]s[param1]f[param2]f[param3]f
    e.g.: ConvertToYV24(chromaresample="userdefined2", param1=126, param2=22, param3=2.25)

    see also description at test6, which was updated with this parameter as well.

    s (support) param - controls the 'support' of filter to use by resampler engine. Float value in valid range from
    1.5 to 15. Default 2.3. It allows to fine tune resampling result between partially non-linear but more sharper and less
    residual ringing (at low b and c values) and more linear processing with wider 'peaking' used. Setting too high
    in common use cases (about > 5) may visibly degrade resampler performance (fps) without any visible output changes.
    Recommended adjustment range - between 2 and 3.

    Examples:
    b=126 c=22 - medium soft, almost no ringing.
    b=102 c=2 - sharper, small local peaking.
    b=70 c=-30 s=2 - sharper, thinner 'peaking'.
    b=70 c=-30 s=2.5 - a bit softer, more thick 'peaking'.
    b=82 c=20 - sharp but lots of far ringing. Not for using.

  • Fix #350 ConvertXXX to accept YV411 clip's frame property _ChromaLocation set to 'left'
    (and 'topleft' and 'bottomleft' which give the same result) instead of giving an error message.

  • Fix #348 bitrol/bitror functions return incorrect results when first argument is negative.
    Regression since the asm code of Avisynth 2.6 classic was ported to C in Avisynth+ project.

  • "Info": if channel mask exists, then

    • its friendly name
    • otherwise the number of channels and the channel combinations
      is displayed under "AudioLength: x".

    e.g.
    SetChannelMask("stereo") --> "Channel mask: stereo"
    SetChannelMask("stereo+LFE") --> "Channel mask: 2.1" because the combination resulted in another known channel combo name
    SetChannelMask("mono+LFE") --> "Channel mask: 2 channels (FC+LFE)" because the combination is unknown

  • Add SetChannel parameter: channel string syntax: (similar to ffmpeg)
    a channel number followed by "c" for getting the default layout for a given number of channels.
    E.g. SetChannelMask("3c") will set "2.1" because this is the default choice for 3 channels

  • Add SetChannel parameter: channel string syntax:
    a simple number is treated as the actual numeric mask.
    E.g. SetChannelMask("3") will set "stereo" because 3=1+2 that is "FL+FR" that is "stereo"

  • SetChannelMask string version: If string is other than "" then its set to known. It has a single string parameter.
    SetChannelMask("mono") -> mask is known: "mono"
    SetChannelMask("") -> mask is unknown

  • Add "speaker_all" to accepted layout mask strings

  • Fix possible crash of LLVM builds (clang-cl, Intel nextgen) on pre-AVX (SSE4-only) CPUs.
    (Prevent static initialization from avx2 source modules, which cause running AVX instructions on DLL load)

  • ConvertToMono, GetLeftChannel, GetRightChannel: sets channel layout AVS_SPEAKER_FRONT_CENTER (mono)

  • GetChannel, GetChannels, MergeChannels will set default channel layout if channel count is 1 to 8
    For defaults see VfW section below

  • New Script function: SetChannelMask: string version.

    SetChannelMask(clip, string ChannelDescriptor) (parameters compulsory, no names must be set) (test10)

    Accepts predefined channel string or channel layout names or their combination, in ffmpeg style.
    Numerical indexes or channel counts are not allowed.
    String is case sensitive!
    E.g. "stereo+LFE+TC" or "FL+LR" or "5.1(side)"
    "mono",
    "stereo",
    "2.1",
    "3.0",
    "3.0(back)",
    "4.0",
    "quad",
    "quad(side)",
    "3.1",
    "5.0",
    "5.0(side)",
    "4.1",
    "5.1",
    "5.1(side)",
    "6.0",
    "6.0(front)",
    "hexagonal",
    "6.1",
    "6.1(back)",
    "6.1(front)",
    "7.0",
    "7.0(front)",
    "7.1",
    "7.1(wide)",
    "7.1(wide-side)",
    "7.1(top)",
    "octagonal",
    "cube"
    "speaker_all"
    Individual Speaker Channels:
    "FL", front left
    "FR", front right
    "FC", front center
    "LFE", low frequency
    "BL", back left
    "BR", back right
    "FLC", front left-of-center
    "FRC", front right-of-center
    "BC", back center
    "SL", side left
    "SR", side right
    "TC", top center
    "TFL", top front left
    "TFC", top front center
    "TFR", top front right
    "TBL", top back left
    "TBC", top back center
    "TBR", top back right

  • AudioDub will inherit channel layout setting from the audio clip.

  • VfW output channel guess (when ChannelMask is not specified) changed at some points.
    Default number of channels to channel layout guess was modified to match of ffmpeg
    3 channels: Surround to 2.1
    4 channels: Quad to 4.0
    6 channels: 6.1(back) to 6.1
    This follows ffmpeg defaults
    Present rules:
    const chnls name layout
    0x00004 1 mono -- -- FC
    0x00003 2 stereo FL FR
    0x0000B 3 2.1 FL FR LFE
    0x00107 4 4.0 FL FR FC -- -- -- -- -- BC
    0x00037 5 5.0 FL FR FC -- BL BR
    0x0003F 6 5.1 FL FR FC LFE BL BR
    0x0070F 7 6.1 FL FR FC LFE -- -- -- -- BC SL SR
    0x0063F 8 7.1 FL FR FC LFE BL BR -- -- -- SL SR

  • Add initial audio channel mask (channel layout) support (CPP and C interface, script function)
    It still belongs to V10 changes (there were only tests since then), but it can be discussed if not.
    Technically it is done by using another 18+2 bits in the Clip's VideoInfo.image_type field.
    Due to lack of enough bits in this VideoInfo field, the mapping between the original dwChannelMask
    and Avisynth's internal values are not 1:1, but all information is kept however.
    This is because not 32 but only 18 (strictly: 18+1) bits are defining speaker locations, so
    the remaining bits of our existing 'image_type' field can be used for this purpose.
    Thus 20 new bits are occupied.

    Programmers can check AvsChannelMask and AvsImageTypeFlags in avisynth.h and avisynth_c.h

    • new C++ interface functions

      • Check for existence:
        bool VideoInfo::IsChannelMaskKnown()
      • Setting:
        void VideoInfo::SetChannelMask(bool isChannelMaskKnown, unsigned int dwChannelMask)
        Re-maps and stores channel mask into image_type, sets the 'has channel mask' flag as well
        Note: this data can be set independently from the actual NumChannels number!
      • Retrieving:
        unsigned int VideoInfo::GetChannelMask()
    • new C interface functions
      bool avs_is_channel_mask_known(const AVS_VideoInfo * p);
      void avs_set_channel_mask(const AVS_VideoInfo * p, bool isChannelMaskKnown, unsigned int dwChannelMask);
      unsigned int avs_get_channel_mask(const AVS_VideoInfo * p);

      Like when establishing BFF, TFF and fieldbased flags from 'image_type', technically 'image_type' can
      be manipulated directly. See SetChannelMask and GetChannelMask in Avisynth source for
      image_type <-> dwChannelMask conversion.

      I guess once ffmpeg will support it, it will read (or not read) channel masks such a way.

    • new Script functions
      bool IsChannelMaskKnown(clip)
      int GetChannelMask(clip)
      SetChannelMask(clip, bool known, int dwChannelMask) (parameters compulsory, no names must be set)
      SetChannelMask(clip, string ChannelDescriptor) (parameters compulsory, no names must be set) (test10)
      dwChannelMask must contain the combination of up to 18 positions or 0x80000000 for SPEAKER_ALL.

    VfW export rules (included the existing sequence)
    1.) OPT_UseWaveExtensible global variable must be...

Read more

AviSynth+ 3.7.2

18 Mar 05:19
Compare
Choose a tag to compare
  • C interface Win32 access: fix issue by adding V8 interface function…
    … names to avisynth.def

    or else names are decorated (Issue #276)
    e.g. DLL published _avs_get_frame_props_ro@8 instead of avs_get_frame_props_ro

  • ShowRed/Green/Blue/Alpha/Y/U/V: addition to earlier fixes:
    When clips are planar and both source and destination format have alpha plane,
    then it will be copied instead of filled with 255d.
    Additional checking is done for alpha plane size when ShowU/V, because when
    source is subsampled the original alpha plane cannot be copied (larger).

  • ConvertBits:
    Does not get frame 0 in constructor for frame properties if 'fulls' is directly specified. (magiblot)
    May make script initialization much quicker (Issue #275)
    #275

  • Trim, AudioTrim: bool 'cache' (default true) parameter.
    Workaround for Issue #274, lower memory consumption but may be slower.
    Benefits heavily depend on how trimmed clips are used later.

  • Expr: scale_inputs to case insensitive and add floatUV to error message as an allowed value.

  • propCopy: able to specify that the property list is negative.
    bool "exclude" = false # default: "props" is positive list

    propCopy(org,true,props=["_Matrix", "_ColorRange"], exclude=false) # merge only two properties
    propCopy(org,true,props=["_Matrix", "_ColorRange"], exclude=true) # merge all, except listed ones
    propCopy(org,props=["_Matrix", "_ColorRange"]) # erase all then copy only selected
    propCopy(org,props=["_Matrix", "_ColorRange"], exclude = true) # erase all, then copy all, except listed ones

  • Version()
    New optional parameters

    int length, int width, int height, string pixel_type, clip c

    Version clip defaults:
    length=240, width = -1, height = -1 (-1: automatically sized to fit for font size 24)
    pixel_type = "RGB24"

    When 'clip' (a format template) is specified then pixel_type, length,
    fps data, width and height are defined from it.
    If any additional 'length', 'width', 'height', 'pixel_type' parameter is given, it overrides defaults.
    When width and height is given and is <= 0 then it is treated as 'automatic'

    Covers feature request Issue #261

  • BlankClip: allow 'colors' with array size more than the number of actual planes.
    If an array is larger, further values are simply ignored.

  • BlankClip, AddBorders, LetterBox: no A=0 check for non-YUVA

  • Fade filter family new parameters
    int 'color_yuv'
    array of float 'colors'
    similar to BlankClip

  • MergeRGB, MergeARGB

    • add MergeARGB parameter "pixel_type", similar to MergeRGB
    • accept pixel_type other than packed RGB formats, plus a special one is "rgb"
    • output format is planar rgb(a) (MergeRGB/MergeARGB) when
      • pixel_type = "rgb" or
      • pixel_type is empty and
        • either input is planar RGB
        • either input is different from 8 or 16 bits (no packed RGB formats there)
      • pixel_type is explicitely set to a valid planar rgb constant e.g. "RGBP10"
    • Accept planar RGB clip in place of input clips and the appropriate color plane is copied from them
    • Fill alpha channel with zero when MergeRGB output pixel_type format is specified to have an alpha plane
    • frame property source is the R clip; _Matrix and _ChromaLocation are removed if R is not an RGB clip
  • PropDelete: accept a non-empty array string as list of property names to remove
    Parameter is not optional, and has no name. It can be either a string (as before) or an array of strings
    propDelete("_Matrix") # old syntax, still accepted
    propDelete(["_Matrix", "_ColorRange"])

  • PropCopy: new string parameter "props" as list of property names to remove
    "props": a non-empty array of strings

    old syntax, still accepted:
    propCopy(org,true) # merge from all org's properties
    propCopy(org,false) # erase all then copy all org's properties (exact copy)
    new syntax
    propCopy(org,true,props=["_Matrix", "_ColorRange"]) # merge
    propCopy(org,props=["_Matrix", "_ColorRange"]) # erase all then copy only selected

  • Histogram Levels: stop using shades of grey on top of bars.

  • Histogram Levels: use bar color 255 for RGB instead of Y's 235. (and scaled eqivivalents)

  • Fix: Histogram "Levels": prevent crash when factor=0.0

  • Fix: Histogram "Levels": fix regression incorrect "factor" applied for U/V part drawing when format was subsampled (non-444)
    Regression since 20160916 r2666 (commit 986e275)

  • Histogram "Audiolevels" and StereoOverlay to deny planar RGB

  • Histogram "Luma": support 10-16 and 32 bits

  • Histogram: give parameter name "factor" and type 'float' for Histogram's unnamed optional parameter used in "Level" mode.
    Other modes just ignore this parameter if given.

  • Fix: Histogram "color" may crash on certain dimensions for subsampled formats.
    Regression since 20180301 r2632.

  • Fix: Histogram "color" and "color2" mode check and give error on Planar RGB

  • Fix: missing Histogram "color2" CCIR rectangle top and bottom line (black on black)
    Regression since 3.6.2-test1 (commit 1fc82f0)

  • Fix: Compare to support 10-14 bits
    was: factor was always using 65535 (2^16-1) instead of (2^bit depth - 1)
    was: 16 bit luma/rgb color values were used for drawing graph

  • Fix: Compare
    'channels' parameter default to "Y" when input is greyscale;
    instead of "YUV" which was giving error because of U and V does not exist for this format.

  • ShowRed/Green/Blue/Alpha/Y/U/V

    • support YUY2 input

    • support YV411 output

    • (not changed: ShowU/ShowV may give error for 420, 422 or 411 format outputs when clip dimensions are
      not eligible for a given output subsampling (check for appropriate mod2 or mod4 width or height)

    • Copy alpha from source when target is alpha-capable

    • Fill alpha with maximum pixel value when target is alpha-capable but source ha no alpha component

    • Delete _Matrix and _ChromaLocation frame properties when needed.

    • More consistent behaviour for YUV and planar RGB sources.

      Default pixel_type is adaptive. If none or empty ("") is given for pixel_type then target format is

      • YUV444 when source is Y, YUV or YUVA
      • RGB32/64 (packed RGB) when source is RGB24/32/48/64
      • RGBP (planar RGB) when source is RGBP or RGBAP

      When 'rgb' is given for pixel_type then then target format is

      • RGB32/64 (packed) when source is RGB24/32/48/64 - old, compatible way
      • RGB planar when source is planar RGB(A) or YUV(A) or Y - changed from rgb32/64 because all bit depth must be supported

      When 'yuv' is given (new option!) for pixel_type then then target format is

      • YUV444 for all sources

      Also there is a new option when pixel_type is still not exact, and is given w/o bit depth.
      pixel_type which describes the format without bit depth is automatically extended to a valid video string constant:

      y, yuv420, yuv422, yuv444, yuva420, yuva422, yuva444, rgbp, rgbap

      Examples:

      32 bit video and pixel_type 'y' will result in "Y32"
      16 bit video and pixel_type 'yuv444' will result in "YUV444P16"
      8 bit video and pixel_type 'rgbap' will result in "RGBAP8"

  • Fix #263. Escaping double-quotes results in error

  • Allow top_left (2) and bottom_left (4) chroma placements for 422 in colorspace conversions, they act as "left" (0, "mpeg2")
    in order not to give error with video sources which have _ChromaLocation set to other than "mpeg2"
    See https://trac.ffmpeg.org/ticket/9598#comment:5

  • Fix: Expr LUT operation Access Violation on x86 + AVX2 due to an unaligned internal buffer (<32 bytes)

  • Fix: Chroma full scale as ITU Rec H.273 (e.g +/-127.5 and not +/-127) in internal converters, ColorYUV and Histogram

  • Fix #257: regression in 3.7.1: GreyScale to not convert to limited range when input is RGB. Regression in 3.7.1
    Accepts only matrix names of limited range as it is put in the documentation.

  • Fix #256: ColorYUV(analyse=true) to not set _ColorRange property to "full" if input has no such
    property and range cannot be 100% sure established. In general: when no _ColorRange for input and
    no parameter which would rely on a supposed default (such as full range for gamma), then an
    output frame property is not added.
    When no _ColorRange for input and no other parameters to hint color range then

    • gamma<>0 sets full range
    • opt="coring" sets limited range
    • otherwise no _ColorRange for output would be set
  • Overlay (#255): "blend": using accurate formula using float calculation. 8 bit basic case is slower now when opacity=1.0.
    Higher bit depths and opacity<1.0 cases are quicker.
    Mask processing suffered from inaccuracy. For speed reasons mask value 0 to 255 were handled
    as mask/256 instead of mask/255. Since with such calculation maximum value was not the expected 1.0 but rather 255/256 (0.996)
    this case was specially treated as 1.0 to give Overlay proper results at least the the two extremes.
    But for example applying mask=129 to pixel=255 resulted in result_pixel=128 instead of 129. This was valid on higher bit depths as well.
    Note 3.7.2 Test2 has a regression of broken maskless mode for 0<opacity<1 which was fixed in 3.7.2 test 3

  • Fix: Attempt to resolve deadlock when an Eval'd (Prefetch inside) Clip result is
    used in Invoke which calls a filter with GetFrame in its constructor.
    (AvsPMod use case which Invokes frame prop read / ConvertToRGB32 after having the AVS script evaluated)
    Remark: problem emerged in 3.7.1test22 which is trying to read frame properties of the 0th frame in its constructor.
    A similar deadlock situation was already fixed earlier in Neo branch and had been backported but it did not cover this use case.
    Note: Prefetch(1) case was fixed in 3.7.2 Test3

Legend:
_vcredist = Includes the MSVC 2019 Redistributable
_xp = Can be used on Windows XP
-filesonly = Only the library and plugins themselve...

Read more

AviSynth+ 3.7.1a

22 Jan 01:35
Compare
Choose a tag to compare

Hotfix release

Needed for version checking with external projects when pkg-config cannot be used.

Luckily, we already have version.h for this, so just copy it to the avs subdir on install. This also required copying arch.h as well.

As this is virtually 1:1 identical with 3.7.1 apart from the Histogram Audiolevels fix and some docs changes, there's really no need to run off new builds for Windows or Mac. Distribution managers for Linux, et al., will want to use 3.7.1a.

AviSynth+ 3.7.1

01 Jan 02:52
b61202a
Compare
Choose a tag to compare

Additions:

  • Linux: Show more information when dlopen fails
  • Expr: allow auto scaling effect on pixels obtained from relative addressing
  • New array manipulators: ArrayDel, ArrayAdd, ArrayIns, ArraySet with accepting multi dimensional indexes
  • ExtractY/U/V/R/G/B/A, PlaneToY: delete _ChromaLocation property. Set _ColorRange property to "full" if source is Alpha plane
  • Add new AEP (Avisynth Environtment Property) constants to directly query Avisynth interface main and bugfix version and system endianness:
    AEP_HOST_SYSTEM_ENDIANNESS, AEP_INTERFACE_VERSION, AEP_INTERFACE_BUGFIX (c++)
    AVS_AEP_HOST_SYSTEM_ENDIANNESS, AVS_AEP_INTERFACE_VERSION, AVS_AEP_INTERFACE_BUGFIX (c)
  • Interface: introduce AVISYNTHPLUS_INTERFACE_BUGFIX_VERSION.
  • New interface functions env->MakePropertyWritable/VideoFrame::IsPropertyWritable.
  • Expr: allow 'f32' as internal autoscale target (was: i8, i10, i12, i14, i16 were accepted, only integers)
  • Expr: LUT mode! 'lut'=1 or 2 for 1D (lut_x) and 2D (lux_xy) support
  • xPlaneMin/Max/Median/MinMaxDifference to accept old packed formats (RGB24/32/48/64 and YUY2) by autoconverting them to Planar RGB or YV16
  • New runtime function: PlaneMinMaxStats returns an array and/or set global variables.
  • Language syntax: accept arrays in the place of "val" script function parameter type regardless of being named or unnamed.
  • Histogram "Levels": more precise drawing when bit depth is different from histogram's resolution bit depth, plus using full/limited flag.
  • Expr: no more banker's rounding when converting back float result to integer pixels. Using the usual truncate(x+0.5) rounding method
  • ColorYUV: More consistent and accurate output across different color spaces, match with ConvertBits fulls-fulld conversions
  • ColorYUV: set _ColorRange frame property
  • ColorYUV: when no hint is given by parameter "levels" then it can use _ColorRange (limited/full) frame property for establishing source range for gamma
  • ColorYUV "showyuv_fullrange"=true: fix shown U and V ranges. E.g. for bits=8: 128 +/- 127 (range 1..255 is shown) instead of 0..255
  • propShow: display _Matrix, _ColorRange and _ChromaLocation constants with friendly names
  • Expr: new function "sgn". Returns -1 when x is negative; 0 if zero; 1 when x is positive
  • Expr: add "neg": negates stack top: a = -a
  • ConvertBits: Support YUY2 (by autoconverting to and from YV16), support YV411
  • ConvertBits: "bits" parameter is not compulsory, since bit depth can stay as it was before. Call like ConvertBits(fulld=true)
  • ConvertBits: much nicer output for low bit depth targets such as dither_bits 1 to 7.
  • ConvertBits: allow dither down from 8 bit sources by giving a lower dither_bits value
  • ConvertBits: dither=1 (Floyd-S) to support dither_bits = 1 to 16 (similar to ordered dither)
  • ConvertBits: dither=0 (ordered) to allow odd dither_bits values. Any dither_bits=1 to 16 (was: 2,4,6,8,..)
  • ConvertBits: dither=0 (ordered) allow larger than 8 bit difference when dither_bits is less than 8.
  • ConvertBits: Correct conversion of full-range chroma at 8-16 bits. Like 128+/-112 -> 128+/-127 in 8 bits
  • ConvertBits: allow dither from 32 bits to 8-16 bits
  • ConvertBits: allow different fulls fulld when converting between integer bit depths (was: they must have been the same)
  • ConvertBits: allow 32 bit to 32 bit conversion
  • frame property support: _ChromaLocation in various filters (e.g. ConvertToYUV422)
  • Support additional chroma locations "top", "bottom_left", "bottom"
  • New syntax for "matrix" parameters (e.g. in ConvertToYUV444 old:"rec601" new "170m:l") which separate matrix and full/limited marker.
    Old syntax is still valid but does not support all new matrix values.
  • frame propery support: _Matrix and _ColorRange in various filters. New "matrix" string constants
  • RGB<->YUV (YUY2) conversions: frame property support _Matrix and _ColorRange (_Primaries and _Transfer is not used at all yet)
  • ConvertBits: use input frame property _ColorRange to detect full/limited range of input clip
  • ColorBars, ColorBarsHD, BlankClip: set frame properties _ColorRange and _Matrix
  • New function: propCopy to copy or merge frame properties from one clip to another.
  • xxxPlaneMin xxxPlaneMax, xxxPlaneMinMaxDifference for 32 bit float formats:
    when threshold is 0 then return real values instead of 0..1 (chroma -0.5..0.5) clamped histogram-based result
  • Allow propGetXXX property getter functions called as normal functions, outside runtime. Frame number offset can be used.
  • YUY2 RGB conversions now allow matrix "PC.2020" and "Rec2020"
  • 4:2:2 conversions: allow ChromaInPlacement and ChromaOutPlacement:
    Valid values: left/mpeg2, center/mpeg1/jpeg
  • 4:2:0 conversions: new ChromaInPlacement and ChromaOutPlacement values:
    top_left, left (alias to mpeg2), center (alias to mpeg1), jpeg (alias to mpeg1) (see http://avisynth.nl/index.php/Convert)
  • Expr: atan2 (SIMD acceleration as well)
  • Expr: sin and cos SIMD acceleration (SSE2 and AVX2) port from VapourSynth (Akarin et al.)
  • Expr: x.framePropName syntax for injecting actual frame property values into expression
  • Script functions to supports arrays with _nz type suffix. (one or more)
  • Expr: arbitrary variable names (instead of single letters A..Z), up to 128 different one.
  • Expr: add 'round', 'floor', 'ceil', 'trunc' operators (nearest integer, round down, round up, round to zero)
    Acceleration requires at least SSE4.1 capable processor or else the whole expression is running in C mode.
  • Recognize \' and \b and \v in escaped (e"somethg") string literals (see http://avisynth.nl/index.php/The_full_AviSynth_grammar#Literals)
  • Expr: allow TAB, CR and LF characters as whitespace in expression strings
  • Clip types for propSet, propGet, add propSetClip, propGetClip
  • Clip content support for propGetAsArray, propSetArray and propGetAll
  • RGBAdjust: analyse=true 32 bit float support

Build environment, Interface:

  • Added stubs for compiling on RISC-V and SPARC
  • Visual Studio 2022: Add /fp:contract to compilation parameters (addition to /fp:precise)
  • Check Visual Studio 2022, add build examples to documentation. Recognized: it has still an option to use v141_xp toolkit
  • CMake build environment: older GCC can be used which knows only -std=c++-1z instead of c++17
  • AviSynth programming interface V8.1 / V9:
    Add 'MakePropertyWritable' to the IScriptEnvironment (CPP interface), avs_make_property_writable (C interface)
    Add 'VideoFrame::IsPropertyWritable' (CPP interface), avs_is_property_writable (C interface)
  • Info on Windows XP compatibility (must revert to an older Visual C++ Redistributable)
  • CMake/source: Intel C++ Compiler 2021 and Intel C++ Compiler 19.2 support
  • experimental! Fix CUDA plugin support on specific builds, add CMake support for the option.
  • Fixes for building the core as a static library

Fixes:

  • Fix: "Text" filter would crash when y coord is odd and format has vertical subsampling
  • Fix: MinMax runtime filter family: check plane existance (e.g. error when requesting RPlaneMinMaxDifference on YV12)
  • Fix: prevent x64 debug AviSynth builds from crashing in VirtualDub2 (opened through CAVIStreamSynth)
  • Expr: fix conversion factor (+correct chroma scaling) when integer-to-integer full-scale automatic range scaling was required
  • ColorYUV: fix 32 bit float output
  • ColorYUV: fix display when showyuv=true and bits=32
  • ConvertBits: "dither" parameter: type changed to integer. Why was it float? :)
  • ConvertBits: Fix: fulls=true -> fulld=true 16->8 bit missing rounding
  • Fix: Planar RGB 32 bit -> YUV matrix="PC.709"/"PC.601"/"PC.2020" resulted in greyscale image
  • SelectRangeEvery: experimental fix on getting audio part (TomArrow; #232)
  • Fix: Overlay "blend" 10+ bit clips and "opacity"<1 would leave rightmost non-mod8 (10-16 bit format) or non-mod4 (32 bit format) pixels unprocessed.
  • Fix: Overlay "blend" with exactly 16 bit clips and "opacity"<1 would treat large mask values as zero (when proc>=SSE4.1)
  • Parser: proper error message when a script array is passed to a non-array named function argument
    (e.g. foo(sigma=[1.1,1.1]) to [foo]f parameter signature)
  • Fix: Expr: wrong constant folding optimization when ternary operator and Store-Only (like M^) operator is used together.
  • ColorBars: fixed studio RGB values for -I and +Q for rgb pixel types
  • ColorBarsHD: use BT.709-2 for +I (Pattern 2), not BT.601.
    Also fixed Pattern 1 Green.Y to conform to SMPTE RP 219-1:2014 (133, not 134).
  • Overlay mode "multiply": proper rounding in internal calculations
  • Fix: ConvertAudio integer 32-to-8 bits C code garbage (regression in 3.7)
  • Fix: ConvertAudio: float to 32 bit integer conversion max value glitch (regression in 3.7)
  • Fix: Crash in ColorBars very first frame when followed by ResampleAudio
  • Fix: frame property access from C interface
  • Fix: StackVertical and packed RGB formats: get audio and parity from the first and not the last clip

Optimizations:

  • Quicker ClearProperties and CopyProperties filters (by using MakePropertyWritable instead of MakeWritable).
  • ConvertBits: AVX2 support
  • ConvertBits: Special case for: 8->16 bit fulls=true, fulld=true
  • Expr: consume less bytes on stack. 48x Expr call in sequence caused stack overflow
  • xxxPlaneMin xxxPlaneMax, xxxPlaneMinMaxDifference for threshold 0 became a bit quicker for 8-16 bit formats (~10% on i7-7700)
  • Speedup: Overlay mode "multiply": overlay clip is not converted to 4:4:4 internally when 420 or 422 subsampled format
    (since only Y is used from that clip)
  • Speedup: Overlay mode "multiply": SSE4.1 and AVX2 code (was: C only)
    SSE4.1: ~1.2-2.5X speed, AVX2: ~2-3.5X speed (i7700 x64 single thread, depending on opacity full/not, mask clip yes/no)
  • ConvertAudio: Add direct Float from/to 8/16 conversions (C,SSE2,AVX2)

Legend:
`_vcr...

Read more

AviSynth+ 3.7.0

11 Jan 22:09
Compare
Choose a tag to compare
  • Haiku support
  • PowerPC support
  • Support for building the core as a static library (mcmtroffaes)
  • Fixes for MinGW-w64 compilation
  • Shibatch, TimeStretch, and ImageSeq GCC build support
  • Shibatch, TimeStretch, and ImageSeq non-Windows support
  • Fix: AddBorders did not pass frame properties
  • Fix: propSet, propDelete and propClearAll not to ruin visibility of variables
    (property read functions are still kept being runtime only)
  • AviSource: fix test5 regression which refused handling old formats like YV24
  • Resizers: throw error on too small dimensions vs. taps
  • Add ShowCRC32 debug filter. Parameters are the same as in ShowFrameNumber
  • Overlay: allow 4:1:1 input
  • Overlay: fix crash when mask is YUV411 and greymask=false
  • Overlay: may work quicker, most input/overlay/mask/output clip format conversions moved to filter constructor
  • RemoveAlphaPlane: do nothing on YUY2 instead of throwing an error message
  • AviSource: support non-printing characters in fourCC code: allow [number] style, e.g. G3[0][16]
  • AviSource: add Y410 (YUVA444P10) format support. Allow 'Y410' pixel_type hints.
  • AviSource: decode b64a, b48r, v210, P210, P010, P016, P216, v410, Y416, r210, R10k, v308, v408, Y410 fourCCs natively.
  • Fix: Average...: check for valid colorspace (e.g. no AverageB for a YUV clip)
  • Add: AverageA
  • New: Average...: allow YUY2, RGB24/32/48/64 inputs
  • Fix: Overlay: Actual frame of a mask clip would be freed up too early in MT environment
  • Fix: ConvertBits to ignore dither parameter instead of throwing error, in a 8 to 8 bit case
  • Fix: GeneralConvolution missing internal rounding on 8-16 bit formats
  • support for Win10 long file path option
  • project: Improve inclusion of the ghc filesystem helper library
  • project: Add a GitHub action workflow
  • posix: fix crash when autoloading imports
  • internally refactored ConvertAudio
  • ConvertBits(8): fix dither=1 (floyd) for RGB48/RGB64
  • Fix: Blur right side garbage: 16 bit+AVX2+non mod32 width
  • Fix: check fn signature with implicite "last" first (3.6 regression)
  • Fix: function parameters provided as arrays (e.g. GrunT callback of WriteFileIf)
  • Fix: ConvertBits (YUV): proper rounding when bit depth is reduced and origin is 10-16 bits
    (added rounder before bit-shift)
  • New: Histogram("color2") to support 10+ bits.
    Allow bits=x (x=8,9,10,11,12) parameter for this kind of histogram as well.

Legend:
*_vcredist* = Includes the MSVC 2019 Redistributable
*_xp = Can be used on Windows XP
*-filesonly = Only the .dll files themselves, no installer. Includes both normal and -xp variants.

If you're unsure of which to download, pick AviSynthPlus_3.7.0_20210111_vcredist.exe

AviSynth+ 3.6.1

20 Jun 02:34
Compare
Choose a tag to compare
  • Fix: proper handling of autoload directories precedence:
    PluginDir+ in Software/Avisynth in HKEY_CURRENT_USER (highest priority)
    PluginDir+ in Software/Avisynth in HKEY_LOCAL_MACHINE
    PluginDir2_5 in Software/Avisynth in HKEY_CURRENT_USER
    PluginDir2_5 in Software/Avisynth in HKEY_LOCAL_MACHINE (lowest priority)
    Plugin (dll file name) found in a lower priority folder will not load if a similarly named plugin
    already existed earlier.
  • fix: GeneralConvolution: incorrect parse of negative integer coefficient (added +1)
    Regression since r2772.
  • Fix: GeneralConvolution: possible crash when chroma=true for 420 and 422 formats
  • Fix: ScriptClip + Runtime function object (which are new in 3.6) under heavy multithreading
  • New: Histogram("levels") to allow greyscale
  • Fix 3.6 regressions
    • when explicit "return last" was needed when followed by legacy function definition.
    • Windows XP is supported again (thread local storage workaround)
    • Stabilize CPP 2.5 plugins
    • allow forced named arrays usage again from plugins (MP_PipeLine)
  • Frame property related constants to match existing enum style in avisynth.h.
    Plus they are not colliding now with VapourSynth's definitions.

Legend:
*_vcredist* = Includes the MSVC 2019 Redistributable
*_xp = Can be used on Windows XP
*-filesonly = Only the .dll files themselves, no installer. Includes both normal and -xp variants.
*_arm64test = Test build for Windows 10 on ARM64 processors.

If you're unsure of which to download, pick AviSynthPlus_3.6.1_20200619_vcredist.exe

AviSynth+ 3.6.0

20 May 21:59
Compare
Choose a tag to compare
  • Added predefined macros for ARM processors. Tested on Raspberry Pi 4B.
  • Added support for disabling the Intel SIMD intrinsics. Gets automatically disabled on non-x86 targets.
  • Added submodule to allow macOS 10.13 and 10.14 to build AviSynth+ with the native Clang compiler
  • Fixed some warnings on GCC (wangqr)
  • Implemented GetNumPhysicalCPUs on Linux and macOS (wangqr)
  • New function:
  SetMaxCPU(string feature)

  string "feature"

  "" or "none" for zero SIMD support, no processor flags are reported
  "mmx", "sse", "sse2", "sse3", "ssse3", "sse4" or "sse4.1", "sse4.2", "avx, "avx2"

  parameter is case insensitive.
  Note: "avx2" triggers FMA3 flag as well.

  Processor options w/o any modifier will limit the CPU flag report to at most the processor level.
  When "feature" is ended by '+', relevant processor feature flag will be switched on
  When "feature" is ended by '-', relevant processor feature flag will be removed
  Multiple options can be put in a comma separated list. They will evaluated in that order.

  Examples:
      SetMaxCPU("SSE2") reports at most SSE2 processor (even if AVX2 is available)
      SetMaxCPU("avx,sse4.1-") limits to avx2 but explicitely removes reporting sse4.1 support
      SetMaxCPU("C,avx2+") limits to plain C, then switches on AVX2-only support
  • Script array for NEW_AVSVALUE define are working again. (default in Linux build - experimental)
  • Fix: Mix/Max Runtime function 32bit float chroma: return -0.5..0.5 range (was: 0..1 range)
  • AviSynth+ enhancements by Nekopanda (Neo fork)
  • Allow multiple prefetchers (MT) (mentioned earlier)
  • Multithreading and deadlock fixes for ScriptClip
    (originally I intended to pull only Neo changes which were fixing an old AVS+ bug,
    namely ScriptClip and multithreading. But I was not able to do that without pulling
    nearly everything from Neo)
  • Caching enhancements.
    SetCacheMode(0) or SetCacheMode(CACHE_FAST_START) start up time and size balanced mode
    SetCacheMode(1) or SetCacheMode(CACHE_OPTIMAL_SIZE) slow start up but optimal speed and cache size
    Latter can do wonders especially at really low memory environment
  • ScriptClip and variable stability in multithreading.
  • UseVar, special filter, opens a clean variable environment in which only the
    variables in the parameter list can be seen.
  • "escaped" string constants: with e prefix right before the quotation mask
    n"Hello \n" will store actual LF (10) control character into the string
    \n \r \t \0 \a \f \ and " are converted
  • Introduce function objects into scripts
    Functions can appear as standard Avisynth variables and parameters (AVSValue type='n')
    https://github.com/nekopanda/AviSynthPlus/wiki/Language-New-Features
    Even with variable capture [] (like in GRuntT args)
  • Filter graph. Switch it on by putting SetGraphAnalysis(true) at the beginning of the script.
    Dump to text file with DumpFilterGraph. E.g. DumpFilterGraph("graph.txt", mode=2)
  • Frame properties (still from Neo!)
    (experimental, we have planned it in Avs+, probably we'll try to follow the VapourSynth methods(?))
  • Fix: Multithreading enhancements and fixes (Nekopanda, from Neo fork)
  • Fix old ScriptClip (runtime filters) issue
    In this example "current_frame" variable was not seen by YDifferenceFromPrevious scripted within SubTitle
    resulting in "ERROR: Plane Difference: This filter can only be used within run-time filters" message
    • Now this script finally works:
  SetLogParams("log.txt", LOG_DEBUG)
  ColorBars(width=640, height=480, pixel_type="yv12")
  ScriptClip(last, "Subtitle(String(YDifferenceFromPrevious))")
  Prefetch(4)
  • Fix deadlock of ScriptClip on MT
  • MT improvement
    • Allow multiple Prefetchers

    • Add argument to Prefetch to change # of prefetch frames without changing # of threads
      ex. Prefetch (clip c, int threads, int "frames")

    • In the original Plus, you could use only one Prefetch, but you can use any number of CUDA versions.
      Also, an argument has been added to specify the number of frames to prefetch.
      Prefetch (1,4) # Make 1 thread stand and prefetch 4 frames
      By doing so, flexible parallelization configuration is possible, such as pipeline parallelization.

      threads
      Number of threads. If it is 0, it passes without doing anything.

      frames
      Number of frames to prefetch.
      Again, if it is 0, it passes without doing anything.

  • Fix: BuildPixelType: chroma subsampling of sample clip was ignored.
  • POSIX: better behaviour under non-Windows because of having multiple sized fixed fonts, not only a single size=20 one.
    e.g. MessageClip(), Info(), Version(), ColorYUV "show", internal ApplyMessage
  • Text filter:
    • font types with
    • "Terminus" fixed fonts added (12-14-16-18-20-22-24-28-32, regular + bold)
    • "Info_h" good old 10x20 fixed font kept under this name
    • much more international unicode characters (1354), use utf8=true under Windows
    • use fontname parameter (default "Terminus", other choice is "info_h")
    • use font_filename parameter (accepts BDF fonts at the moment - import is probably not too smart but worked for Terminus)
    • use size parameter (12 to 32, if no size is available, a smaller one is chosen but at least the smallest one)
    • new parameter: bold (default false)
  • Info() filter: when parameter "size" < 0, font is automatically enlarged over 640x480
    (POSIX limit: minimum size is 12, maximum size is 32 - limited by available fixed fonts)")
  • SIL OPEN FONT LICENSE added because of usage of Terminus fonts)
  • able to build w/o GDI and font rendering engine under Windows, so that text-overlay filters
    work like in POSIX version of AviSynth+ (mainly for my development test)
    Use with NO_WIN_GDI define.
  • Fix: ReplaceStr when the pattern string to be replaced is empty
  • New:
    Exist() to have bool utf8 parameter
    This is another function to have utf8 option:
    Usage: b = Exist("Здравствуй.mkv",utf8=true). Avs file is saved as utf8 w/o BOM
  • Fix: broken Exist for directories (regression appeared in 3.5.0)
  • Fix: ColorYUV: really disable variable search when parameter "conditional" is false
  • Development:
    ScriptEnvironment::VSprintf: parameter (void *) is changed back to va_list.
    May affect C interface (avs_vsprintf) and CPP interface (ScriptEnvironment::VSprintf)
  • Enhanced: Planar RGB to YUV 444 10-14 bits: more precision (32 bit float internally)
  • Enhanced: Planar RGB to YUV 444 10-16 bits: AVX2 (speed improvement)

AviSynth+ 3.5.1

02 Apr 23:14
Compare
Choose a tag to compare
  • More compiler coverage on POSIX
    • Native Clang on FreeBSD 12.1
    • Native AppleClang on Catalina
    • general code correctness fixes (-fpermissive is no longer required)
  • AddAutoloadDir now works on macOS and BSD
    • FreeBSD requires mounting procfs first in order for autoload to function
  • Automatic plugin autoloading now enabled on POSIX
  • ConvertStacked now is built and installed on POSIX by default
  • SONAME and SOVERSION defined for POSIX libavisynth.so
  • Fix: BuildPixelType: chroma subsampling of sample clip was ignored.
  • POSIX: better behaviour under non-Windows because of having multiple sized fixed fonts, not only a single size=20 one.
    e.g. MessageClip(), Info(), Version(), ColorYUV "show", internal ApplyMessage
  • Text filter:
    • font types with
      • "Terminus" fixed fonts added (12-14-16-18-20-22-24-28-32, regular + bold)
      • "Info_h" good old 10x20 fixed font kept under this name
    • much more international unicode characters (1354), use utf8=true under Windows
    • use fontname parameter (default "Terminus", other choice is "info_h")
    • use font_filename parameter (accepts BDF fonts at the moment - import is probably not too smart but worked for Terminus)
    • use size parameter (12 to 32, if no size is available, a smaller one is chosen but at least the smallest one)
    • new parameter: bold (default false)
  • Info() filter: when parameter "size" < 0, font is automatically enlarged over 640x480
    (POSIX limit: minimum size is 12, maximum size is 32 - limited by available fixed fonts)")
  • SIL OPEN FONT LICENSE added because of usage of Terminus fonts)
  • able to build w/o GDI and font rendering engine under Windows, so that text-overlay filters
    work like in POSIX version of AviSynth+ (mainly for my development test)
    Use with NO_WIN_GDI define.
  • Fix: ReplaceStr when the pattern string to be replaced is empty
  • New:
    Exist() to have bool utf8 parameter
    This is another function to have utf8 option:
    Usage: b = Exist("Здравствуй.mkv",utf8=true). Avs file is saved as utf8 w/o BOM
  • Fix: broken Exist for directories (regression appeared in 3.5.0)
  • Fix: ColorYUV: really disable variable search when parameter "conditional" is false
  • Development:
    ScriptEnvironment::VSprintf: parameter (void *) is changed back to va_list.
    May affect C interface (avs_vsprintf) and CPP interface (ScriptEnvironment::VSprintf)
  • Enhanced: Planar RGB to YUV 444 10-14 bits: more precision (32 bit float internally)
  • Enhanced: Planar RGB to YUV 444 10-16 bits: AVX2 (speed improvement)