github libass/libass 0.16.0
Release 0.16.0

latest releases: 0.17.1, 0.17.0
23 months ago

This release brings a new ASS_FEATURE_WHOLE_TEXT_LAYOUT API toggle, brings an important API change on (only) Microsoft’s Win32 platform to enable arbirtrary paths to be used rather than only ANSI ones, fixes an incompatibility with FreeType versions >= 2.11.1 on Win32 and brings many more bug and compatibility fixes as well as other improvements.

API users are highly encouraged to pay special attention to the following points:

  • The documentation has been expanded and multiple errors in it have been fixed. It may be worthwhile to reread the documentation for all functions you are using (or all of it). If you still have questions afterwards or spot an error, please contact us so the docs can be further improved.

  • For those on Win32 only (other platforms do not require special handling of the path’s encoding):

    The new support for arbitrary paths via the new dual encoding used in the majority of our API is mostly backward compatible, i.e. continuing to use fopen ANSI paths works mostly as well (or bad) as before except when there are actual on-disk name collisions. However, the other way around, using the new encoding with older libass binaries, will in general fail unless the paths happen to be pure 7-bit US-ASCII.

    If you want to make use of arbitrary paths but also wish to continue to support older libass versions, you should continue to always use the fopen encoding if ass_library_version() < 0x01502002.

    Technically, this should be accompanied by an increase in the minor soname version, but there is none because the change is Win32-specific and the minor soname version is not even used by the dynamic linker in common MS Windows setups.

Detailed changes:

  • Fix missing -framework options in libass.pc on macOS
  • Fix missing GDI or DirectWrite options in libass.pc on Win32
  • Fix crashes with fonts missing Postscript names and without one being synthesised by the font provider
  • Fix crashes on negative fontsizes and some overflows
  • Fix a rare memory leak introduced in 0.13.0
  • Fix minimum dependency versions in configure and our pc-file
  • Fix our public headers for use with GCC versions between 3.1.0 and 4.5.0 (was a regression introduced in 0.15.0)
  • x86: Fix potential buffer over-read by 16 bytes with AVX2 assembly when large tiles are not enabled (the default)
  • x86: Fix PIC flags not being interpreted by the assembler, breaking the asm-enabled build setup on NetBSD and OpenBSD. On 32-bit x86, if the toolchain requires PIC objects and relies on compiler defaults to get PIC implicitly, you need to pass --with-pic to configure to ensure NASM always produces PIC objects
  • x86: Fix AVX support not being detected on non-Intel CPUs and some VMs
  • x86: Fix CPUID being used on CPUs not supporting the instruction (<= i486) and the way it is used for CPUs with less than 7 CPUID-leafs which could lead to crashes due to illegal instructions
  • MS Windows-only issue: Fix crashes with FreeType >= 2.11.1 on Win32 when rendering strikethrough or underline
  • Improve \iclip quality
  • Improve quality of very small outlines
  • Switch to wyhash for much better cache performance
  • Propagate ZWJ/ZWNJ effects across glyph run boundaries
  • Do not depend on compiler-specific defines to actually use built assembly
  • Expand documentation and fix mistakes in it
  • configure now errors out if an explicitly requested feature is unavailable
  • MS Windows-only issue: ease linking against static/shared GNU FriBidi
  • Add ASS_FEATURE_WHOLE_TEXT_LAYOUT to apply bidi, shaping and \fay to the entire unsplit event text. The non-portable Encoding=-1 mode always behaves as if the feature were enabled
  • MS Windows-only issue: add support for arbitrary Unicode paths; see documentation of related functions for details
  • Improve VSFilter compatibility
    • Do not treat format lines using Actor in place of Name as custom format lines. The former is used by VSFilter itself, the latter by Aegisub
    • Run bidi and shaping on each glyph run separately by default
    • Match VSFilter’s \fsp effects on bidi and shaping
    • Match VSFilter’s \fay behaviour
    • Support non-Unicode font cmaps when Win32 API or iconv is available and can convert to the relevant encoding
    • Treat empty clip outlines as if everything was outside the clip not inside (was a 0.14.0 regression)
    • Parse integer parameters of override tags more like VSFilter

This release is signed by the same OpenPGP key as the 0.15.x series of releases. Future releases may be signed with other keys listed in the new MAINTAINERS file.

Don't miss a new libass release

NewReleases is sending notifications on new releases.