| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Non-recursive Makefiles allow better and more robust automatic
dependency resolution and higher parallelism for shorter build-times.
This change keeps all locations of the non-installed targets unchanged
for minimal firction. Calling make from subdirectories no longer works,
but instead the specific build targets can be invoked directly from the
toplevel.
If we bumped the required Automake version to 1.13+, the library
fragment could use %reldir% or %D% to be unaffected by potential
future directory moves, but it is unlikely we'll ever change the
location or name of the libass directory.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 7bit 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.
Signed-off-by: Oleg Oshmyan <chortos@inbox.lv>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, we use `INTEL` to denote any supported x86 variant
and `X64` to denote specifically x86-64 (and previously used
`X86` to denote 32-bit x86).
`INTEL` is a subpar name for two reasons:
* Intel has produced notable non-x86 architectures (Itanium).
* x86-64 was designed and patented not by Intel but by AMD.
This is currently only used in configure.ac and Makefile.am,
so it does not matter much. However, the next commit will expose
a config.h macro flagging the whole x86 family, which non-Autotools
users will have to set manually, so this will cease being a purely
internal choice and will start confusing users.
Instead, the most generic name for the whole family that is in common
use and does not suffer from such problems is "x86", so use `X86`.
The switch is slightly complicated by the fact our configure.ac and
Makefile.am used to use `X86` as in Microsoft's naming scheme, where "x86"
means "32-bit x86". Ideally, we would use another equally good name for
the family that is free from this ambiguity; however, I know no such name.
(Indeed, `X86` as a name for 32-bit x86 is problematic even if one
disregards x86-64, because 16-bit x86 exists as well. This commit
technically leaves configure.ac to lie about 16-bit x86 by setting
`X86=false`, but we have no 16-bit assembler code, so the new use of
`X86` should be viewed as a name for "any *supported* variant of x86".)
To somewhat highlight that we're no longer using Microsoft's scheme,
also switch the name for the x86-64 architecture from `X64` to `X86_64`.
This should also make it more intuitively obvious that one (X86_64) is
a subset of the other (X86). This is also a more standard name with a
clearer etymology, and we already use this name in our `ASFLAGS`.
|
| |
|
|
|
|
|
|
|
| |
This is a very fast hash function for the cache system
The version of the header corresponds to
https://github.com/wangyi-fudan/wyhash/commit/166f35228204b97ddd8ddead6b7a00467c91fdf6
|
|
|
|
|
|
|
|
|
|
| |
libtool assumes NASM accepts the same flags as the C-compiler, which is
not actually the case. Previously we used -prefer-no-pic to avoid any
additional flags being appended by libtool, which worked well for all tested
platforms, but as it turns out it doesn't for NetBSD and OpenBSD.
Using this wrapper-script also enables us to automatically define the PIC
macro as needed, which became relevant when we started supporting
32-bit x86 PIC-assembly in 026d65e707637b0f90902bca48654871e33575f3.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Another bug fix release without API or ABI changes, mainly to
fix more known 0.15.0 and 0.15.1 regressions. But as a bonus,
it is now possible to build the DirectWrite system font provider
for Microsoft's Universal Windows Platform (UWP).
Two known minor 0.15.x DirectWrite system font regressions remain:
* when a font is attached/memory-loaded but a different (non-attached)
style of the same font is used by the subtitles
(only the attached style[s] will be used;
this also affects Core Text since 0.13.0 but not Fontconfig);
* in the unlikely case that the full name of a system font
equals the _family_ name of another system font
(only the family name matches will be found).
Also please note that our IRC channel #libass has moved from freenode.net
to Libera.Chat, and all presence on freenode.net has been fully retired.
|
|
|
|
| |
This avoids an extra trip to FreeType.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Change list:
- Fixed differences from C version introduced
in f23b9ed64bd4ccf249c686616dd3f51a69d285dc.
- Common macro for SSE2 and AVX2 versions.
- Reduced register usage and efficient 32-bit version.
- Full width memory operations instead of half-register.
- Vectorized handling of width tails instead of byte/word loops.
- Vectorized initial population of temporary buffer and final line fill.
- Interleaved layout of temporary buffer.
- Great speedup overall.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Since C does not allow empty enums, there is an "example", which doesn't
do anything. I think we might be able to make this change the default
bidi direction or so. As if this commit, the flag set by it is also not
available outside of ass.c, which should be solved by moving parser_priv
to an internal header.
|
| |
|
|
|
|
|
|
|
| |
Clang gives this warning for the universal initializer `={0}`:
https://bugs.llvm.org/show_bug.cgi?id=21689
Signed-off-by: Oleg Oshmyan <chortos@inbox.lv>
|
| |
|
|
|
|
|
| |
nasm always uses %include paths starting from the directory from where
it's started.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
sizeof(ASS_Style) is actually part of the ABI, so adding the Justify field
in commit e54c123d5a08b6212533ddcced2cb1a50fa3d2b2 broke the ABI even
though we tried to avoid it by placing the field at the end of the struct.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The loop in check_duplicate_event() essentially makes event processing
with ass_process_chunk() O(n^2). Using a bitmap instead of a loop brings
it back to O(n).
This could be interpreted as an API change: since the event list is
freely modifieable by the API user through ASS_Track public fields,
libass can't know if the internal bitmap went out of sync with the
public event list. We just redefine it so that calling
ass_process_chunk() means the API user agrees not to manipulate the
event list otherwise.
|
| |
|
|
|
|
|
| |
The ass_func_template.h entry was removed with commit c22a4ff9.
utils.asm is really new.
|
|
|
|
|
|
|
|
|
| |
As before, this does not add any build system support:
a config.h file and a project must still be manually created
(or the compiler can be run manually instead of using a project).
Signed-off-by: Grigori Goronzy <greg@kinoho.net>
Signed-off-by: Oleg Oshmyan <chortos@inbox.lv>
|
|
|
|
|
|
|
|
| |
OS or platform-specific locale independent functions are painful to
use and/or not available, so roll our own. Not great but the least
painful and least intrusive.
v2: fix indexing, use static inline
|
|
|
|
|
| |
Also, remove the ass_coretext.c conditional compilation hack, and fix
Makefile.am instead.
|
|
|
|
|
|
|
| |
Rename dwrite.h to dwrite_c.h to make the difference between the
official header and ours clearer. Also apply minor cleanups to it.
Remove the patch against upstream MinGW; it's pointless now.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Unfortunately, nobody ever tested the MinGW dwrite.h header in C. There
are multiple glaring mistakes, and the header doesn't even compile by
itself. The main issues are overloaded functions (which doesn't work
in C), and broken COBJMACROS defines.
dwrite.diff contains changes to dwrite.h which make libass work.
Warning: the patch lacks a required change to the DrawInlineObject
method of IDWriteTextRenderer (missing THIS_).
Additionally, these definitions would ideally be provided by dwrite.h:
DEFINE_GUID(IID_IDWriteFactory, 0xb859ee5a,0xd838,0x4b5b,0xa2,0xe8,0x1a,0xdc,0x7d,0x93,0xdb,0x48);
DEFINE_GUID(IID_IDWritePixelSnapping, 0xeaf3a2da,0xecf4,0x4d24,0xb6,0x44,0xb3,0x4f,0x68,0x42,0x02,0x4b);
DEFINE_GUID(IID_IDWriteTextRenderer, 0xef8a8135,0x5cc6,0x45fe,0x88,0x25,0xc5,0xa0,0x72,0x4e,0xb8,0x19);
Also, in order to make libass compile out of the box with current
MinGW/msys installations, a very stripped down in-tree copy of dwrite.h
is provided.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fontconfig is known to be very slow on OS X and Windows, this has to do with
the extremely prohibitive cache times (which are getting even longer with
latest versions of Fontconfig).
This commits starts to address the problem by using CoreText on OS X to load
the font data. The commit uses the simplest possible approach to load all of
the data in memory and then use it to match. This causes a somewhat slow
startup time (around ~400ms on my i7) but it is already better than waiting
*minutes* for Fontconfig to cache the fonts data.
A later commit will improve the speed of the match by using a hybrid approach
that lazy loads in the libass database only the necessary fonts.
|
|
|
|
|
|
|
| |
Implement a simple font sorter (FontSelector) and an interface to deal
with multiple font sources (FontProvider). Unfinished business,
but works for the most part. Currently the only implemented FontProvider
uses fontconfig.
|
|
|
|
|
|
|
|
|
|
| |
That's complete version with SSE2/AVX2 assembly.
Should be much faster than old algorithm even in pure C.
Algorithm description can be found in this article (PDF):
https://github.com/MrSmile/CascadeBlur/releases
Close #9
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Use one pointer to table of functions instead of scattered
bunch of function pointers. Different versions of these tables
can be constructed in compile time.
Also, bitmap memory alignment now depends only on SSE2/AVX2 support
and is constant for every width. That simplifies code without
noticeable performance penalty.
|
| |
|
|
|
|
| |
Fixes #161
|
| |
|
|
|
|
| |
Signed-off-by: Rodger Combs <rodger.combs@gmail.com>
|
|
|
|
|
|
| |
Adds yasm version check and handles Free/OpenBSD/win32 correctly.
Signed-off-by: Grigori Goronzy <greg@chown.ath.cx>
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Patch by jon_y on IRC.
|
|
|
|
|
|
|
|
| |
This reverts commit 840ce4c2d9381e340c3239d104933fea85fff3e5.
Harfbuzz added UCDN support much quicker than I thought and the latest
release 0.9.5 contains UCDN already, so we don't need it in libass
anymore.
|
|
|
|
|
|
| |
Add explicit support for UCDN, without relying on any HarfBuzz
integration. This finally allows easy usage of HarfBuzz without glib,
ICU, or some other big bloated library!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds fully working bidirectional text and simple shaping support.
The following works:
- bidirectional text according to the Unicode Bidirectional Algorithm
- simple shaper for mirrored forms (brackets, etc.) according to
rule L4 of the Unicode Bidirectional Algorithm
- reordering into visual order with correct line wrapping
However, the implementation certainly needs efficiency improvements
(caching, less malloc'ing), a proper shaper (HarfBuzz) needs to be
hooked up and various bugs with karaoke and positioning need to be
fixed.
|
| |
|
|
|
|
|
| |
Increment shared library revision (due to API additions) and autoconf
version.
|
| |
|
|
|
|
|
|
|
|
|
| |
strtod respects the locale and in some locales, the decimal separator is
not a point, leading to parsing errors in tags like \pos(23.4,5), which
are perfectly valid.
As there isn't a really portable way to use a particular locale just for
one call to strtod, reimplement it. The implementation was taken from
the 1.8 branch of Ruby.
|
|
|
|
|
| |
Move all code related to parsing event lines and processing override
tags into a separate file (ass_parse.c).
|
| |
|
| |
|
|
|
|
|
| |
Rename ass_cache_template.c to ass_cache_template.h; add libass.sym to
EXTRA_DIST.
|
|
|
|
|
|
| |
Instead of referencing string defines from help_mp.h, use the strings
directly in ass_msg. Consequently, help_mp.h is useless and can
be deleted.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|