summaryrefslogtreecommitdiffstats
path: root/libass/ass_cache.c
Commit message (Collapse)AuthorAgeFilesLines
* ass_cache: charge byte-based caches for the CacheItemrcombs2023-02-181-3/+3
|
* refactor: prefix all internal API with ass_Oneric2022-10-221-2/+2
| | | | | | | | | | | | | | | If static libass is linked into a binary defining functions of the same name there will be issues. To avoid this use an ass_ prefix for namespacing. Before this commit we already did this for most but not yet all internal API. read_file is renamed to ass_load_file as ass_read_file already exists as a public API function. All other functions are simply prefixed with ass_. Fixes: https://github.com/libass/libass/issues/222 Fixes: https://github.com/libass/libass/issues/654
* cache: switch to wyhash for cache tablesrcombs2021-10-181-17/+7
| | | | This is dramatically faster on files with large drawings.
* cache: give the hash a more generic function namercombs2021-10-151-5/+5
|
* Move the cache function to ass_cache.cOneric2021-10-151-0/+22
|
* cache: replace memcpy() in key move functions with assignmentDr.Smile2021-02-221-20/+23
|
* parsing: use string references for font family and drawing textDr.Smile2021-02-221-9/+10
| | | | That eliminates most uses of strdup() in the rendering process.
* Move ASS_FontDesc to generic cache infrastructureDr.Smile2021-02-221-25/+0
|
* bitmap: remove level of indirection in bitmap functionsDr.Smile2019-05-201-10/+9
| | | | | This allows to use Bitmap struct directly as cache value and to remove bunch of unnecessary allocations.
* cache: remove level of indirection in glyph metrics valueDr.Smile2019-05-201-1/+1
|
* renderer: improve handling of subpixel shiftDr.Smile2019-05-201-13/+7
| | | | | | | Integral pixel shift is extracted in quantization function now, taking account of full glyph transformation and not only translation part of it. It makes program logic more straight and ensures that subpixel shift from cache key never exceed full pixel.
* Consolidate and quantize all transformationsDr.Smile2019-05-201-75/+43
| | | | | | | | | | | | | | This commit defers all outline transformations until rasterization stage. Combined transformation is then quantized and used as bitmap key. That should improve performance of slow animations. Also caching of initial and stroked outlines and bitmaps is now separate in preparation to proper error estimation for stroker stage. Note that Z-clipping for perspective transformations is now done differently compared to VSFilter. That clipping is mostly safety feature to protect from overflows and divisions by zero and is almost never triggered in real-world subtitles.
* cache: cleanupDr.Smile2019-05-191-52/+75
|
* cache: construct cache values only from corresponding keysDr.Smile2019-05-191-31/+34
| | | | | | | | | | | | | | | | | | | | This commit forces construction of cache values using only data available in its companion keys. That ensures logical correctness: keys are guaranteed to have all the necessary data, and prevents accidental collisions. Most fixes of cache logic correspond to minor problem when rendering is done with double parameter but cache key stores its approximate fixed-point representation. The only serious problem is missing scale of clip drawing. Also this commit removes unused scale parameters from glyph metrics cache key. Due to missing scale clip shapes that differed only in scale treated by cache system as identical. That can lead to incorrect reuse of cached bitmap of different scale instead of correct one. The only hack left is in glyph metrics cache with its unicode >= VERTICAL_LOWER_BOUND check.
* renderer: switch to using two border outlines instead of oneDr.Smile2017-07-311-4/+3
|
* cosmetic: extract most of the outline-related functions into separate fileDr.Smile2017-07-311-0/+1
|
* cache: fix ownership tracking issues of ASS_FontDr.Smile2016-07-161-1/+1
|
* cache: keep referenced cache values alive after ass_cache_empty()Dr.Smile2016-06-301-83/+95
|
* cache: keep ref_count of all active objects nonzeroDr.Smile2016-06-301-51/+64
|
* cache: replace size_func with parameter in ass_cache_commit()Dr.Smile2016-06-301-40/+10
|
* cache: remove ass_cache_cancel(), cache failures insteadDr.Smile2016-06-301-80/+132
|
* cache: switch to gradual cache clearingDr.Smile2016-06-301-66/+189
| | | | | | | | | | | Advantages over the old algorithm consist of the following. * There are no glitches due to full cache clearing. Items are arranged into linked list ordered by time of last use. Only the oldest items get deleted at the clearing event. * Each item now keeps track of number of references. Referenced cache values are immune to clearing. * Reduced amount of total cache memory for the same performance. * Reduced number of memory allocations per cache item.
* Fully fix compilation with MSVC/ICLOleg Oshmyan2015-09-171-0/+1
| | | | | | | | | 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>
* Custom font matching and font sourcesGrigori Goronzy2015-07-101-4/+0
| | | | | | | 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.
* Clean up bitmap combiningDr.Smile2015-01-281-11/+40
| | | | | | | | | | Now pre- and post-combining operations are clearly separated, many parameters in cache keys are no longer necessary due to that. Also an ambiguous (in case of multiple fonts) text string is replaced with a list of direct bitmap references in composite cache key. Fixes #153. Fixes #82.
* Replace FT_Outline with ASS_OutlineDr.Smile2014-11-231-4/+4
|
* Check more mallocswm42014-11-091-0/+14
| | | | This is just a start and gets most easy ones.
* Fix caching of combined bitmaps after complex shapingOleg Oshmyan2014-09-051-1/+1
|
* Combine bitmaps before applying blur and shadow11rcombs2014-01-251-3/+19
|
* Attempt to make code more readablewm42014-01-251-9/+11
| | | | No more double pointer dereferencing.
* Append new cache items at the start of the collision list11rcombs2014-01-251-2/+2
| | | | | | | The idea is that more recently-added cache items are more likely to get hits. Signed-off-by: wm4 <wm4@nowhere>
* harfbuzz: cache glyph metricsGrigori Goronzy2011-07-291-0/+7
| | | | | | HarfBuzz' FreeType font functions do not cache anything and call FT_Load_Glyph all the time, which can be slow. Add a cache for metrics and use it with custom font functions.
* Fix cache leakGrigori Goronzy2011-07-061-1/+1
| | | | | Fixes a leak introduced with the new cache functions, caused by wrong pointer usage.
* cache: unified bitmap cacheGrigori Goronzy2011-06-271-0/+25
| | | | | | Similarly to the glyph cache, subclass the bitmap cache to allow both outline bitmaps and clipping mask bitmaps to coexist in the same cache in a much cleaner way.
* cache: safer ass_cache_statsGrigori Goronzy2011-06-271-4/+8
|
* cache: fix size tracking and emptyingGrigori Goronzy2011-06-271-3/+5
|
* cache: unified outline cache for glyphs/drawingsGrigori Goronzy2011-06-271-24/+39
| | | | | | | | | Glyphs and drawings have wildly different hash keys. Subclass the hash keys of glyphs and drawings in a new, unified outline cache. This also fixes some issues with drawings in the glyph cache. Now, the textual description of the drawing is included in the key (the hash value isn't really good enough, especially not fnv32) and the baseline offset is saved as well.
* Clean up includesGrigori Goronzy2011-06-211-5/+0
|
* Convert outline processing and caching from glyphs to bare outlinesGrigori Goronzy2011-06-201-5/+7
| | | | | | | | | This introduces functions to use and copy pointered outline objects easily and uses these instead of glyphs everywhere. Previously the glyph cache was abused for caching vector clipping masks, but this isn't possible anymore (nor desirable), thus vector clipping cache has been disabled for the moment.
* Add cache statisticsGrigori Goronzy2011-06-071-9/+6
|
* Much improved cache/hashmap implementationGrigori Goronzy2011-06-071-250/+170
| | | | | | | | - less code, cleaner - decoupled from ASS_Library - better data encapsulation - simpler interface - avoids a nasty hack
* Relicense to ISCGrigori Goronzy2010-09-281-12/+10
| | | | | | In hope to make libass as useful as possible, relicense libass to ISC, a simplified 2-clause BSD license. All contributors who provided non-trivial changes have granted their permission for this.
* Limit (bitmap) glyph cache sizeGrigori Goronzy2010-08-011-0/+5
| | | | | | | | | | Now that bitmap glyphs (for vector clip masks) are stored in the glyph cache, make sure it cannot grow indefinitely easily. Similar to the bitmap cache, track approximate size of the cached elements and reset if the cache exceeds a certain limit. Also, reduce default bitmap cache size to 30 MB as we have essentially two bitmap caches now. That's still plenty in all use cases where caching matters.
* Basic @font supportGrigori Goronzy2010-04-111-0/+2
| | | | | | Do not skip '@' at the start of a font name in styles; detect '@' at font name start and set a new attribute in ASS_Font accordingly. Rotate affected glyphs after loading and calculate a suitable advance.
* Fix crash if glyph bitmap rasterization failsGrigori Goronzy2009-08-141-1/+1
| | | | | Check whether the glyph bitmap used for cache size calculations really exists.
* Rename typedefs (breaks API)Grigori Goronzy2009-08-061-62/+62
| | | | | | Rename all typedefs from the convention foo_bar_t, which can possibly conflict with POSIX types, to FooBar (and ASS_FooBar for public API typedefs). Fix formatting and stray comments while at it.
* Introduce simple cache memory managementGrigori Goronzy2009-07-191-0/+6
| | | | | | | | | | | libass' cache was basically unmanaged; it would grow without any limits, depending on how complex the subtitles are. Introduce a simple limiting that resets the cache if certain limits are exceeded. The bitmap cache is limited to approx. 50 MB size by default, while the glyph cache allows storing up to 1000 glyphs by default. A few tests with rather heavily softsubbed fansubs show that these limits are fine. The API was extended with the function ass_set_cache_limits which allows modification of these limits.
* Updates for autotools' make distGrigori Goronzy2009-07-121-2/+2
| | | | | Rename ass_cache_template.c to ass_cache_template.h; add libass.sym to EXTRA_DIST.
* Message callback funtionalityGrigori Goronzy2009-07-111-13/+22
| | | | | | | | | | | Introduce functionality for providing a message callback that is used for passing messages to the controlling application instead of simply printing them to standard output. The function pointer to the callback is stored in the ass_library_t instance. ass_msg needs access to it, so in many places the library instance needs to be passed around now. The default behavior is the old one: messages of MSGL_INFO or lower are printed to the standard output, prefixed with "[ass]".
* Replace string defines with real stringsGrigori Goronzy2009-07-111-1/+2
| | | | | | 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.
* Implement drawing mode (\p)Grigori Goronzy2009-07-061-27/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Finally implement the drawing mode, which allows drawing of custom vector graphics. Drawings are intercepted in ass_render_event; a hash of the drawing string is generated which is then used for looking up drawings and bitmaps of drawings in the cache. The drawings itself are "fake" glyphs. They are created by parsing the simple drawing description language, evaluating the curves described (lines, cubic beziers and/or a special kind of b-splines) and creating vector outlines. Afterwards, these drawings are (with a few exceptions, e.g. ascender/descender) exactly handled like regular glyphs. Support for vector clippings is still missing, but otherwise the implementation should be complete and compatible with VSFilter. The libass integration of the drawing parsing/processing code is still a bit sketchy and should be refactored. History: WIP: Drawing mode infrastructure WIP: Drawing tokenizer WIP: Parse drawing tokens, call evaluators WIP: Bezier/b-spline evaluator WIP: Final pieces for the drawing mode WIP: Heavy modifications to the drawing parser/tokenizer WIP: Dynamic outline memory allocation WIP: Drawing position fixes WIP: more drawing position fixup (similar to VSFilter now) WIP: Lots of cleanup and fixes for drawings. WIP: Drawing mode integration into ass_render_event
* Include ass_utils.h instead of mputils.hGrigori Goronzy2009-06-271-1/+1
|
* Rename mp_msg to ass_msgGrigori Goronzy2009-06-271-1/+1
|
* Use safe hash functions for composite bitmapsUoti Urpala2009-06-201-1/+2
| | | | | | | | | | | | | | | Previously the composite bitmap hash keys were compared and hashed based on all the bytes in the struct, which could cause problems because of padding bytes. Change the code to use field-by-field operations as already done for other hash key types. The composite hash key contains two bitmap hash keys. The hashing function currently handles those by calling the function to calculate the corresponding bitmap hash, and then updating the composite hash by treating the result of the function call as a byte buffer. An alternative would be to change the hash functions so that the initial hash value could be passed as a parameter to the recursively called function.
* Reindent all source code.greg2009-06-201-191/+215
| | | | | | | | | | | | | | | Reindent complete source code (*.c, *.h) with indent, the exact command line being: indent -kr -i4 -bap -nut -l76 *.c *.h From now on, new code should use (more or less) K&R style, only spaces and no tabs, 4 spaces indent width. Avoid long lines. Fix function declaration pointer spacing. Remove spaces that were added to many function declarations by indent, like some_func(foo_t * bar). Fix indenting of macros in ass.c
* Remove cache globals; move cache data into a separate cache_store structgreg2009-06-191-53/+33
| | | | that is part of ass_renderer.
* From uau: libass: Fix cache lookup problem causing memory bloatgreg2009-06-191-2/+10
| | | | | | | | | | | | | | | | | | | | | | The cache code did hash lookups by storing key values in struct fields and then hashing and comparing the struct as a single memory block. In at least one case such a struct contained uninitialized padding bytes which prevented the complete memory area of the struct from matching even though the fields did. As a result the code failed to find existing objects in the cache and stored new versions of them, causing gigabytes of memory use in some circumstances. Initializing the struct memory to zero before writing the fields avoided such memory use in tests but is not guaranteed to work if I interpret the C standard correctly (the compiler is allowed to write garbage over padding bytes when changing struct member values). Change the code to use struct-specific hashing and comparison functions that work field by field to guarantee correct behavior. Create these by replacing the struct definition with a template that lists the fields and can be used the generate each of struct definition, hash function and compare function with some preprocessor magic (otherwise every field would need to be listed separately in all three).
* whitespace cosmetics: Remove all trailing whitespace.diego2009-05-131-3/+3
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29305 b3059339-0415-0410-9bf9-f77b7e298cf2
* Treat -font/-subfont as Fontconfig pattern in libass.eugeni2009-03-081-0/+2
| | | | | | Patch by Adrian Stutz (adrian sttz ch). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28895 b3059339-0415-0410-9bf9-f77b7e298cf2
* Combine adjacent overlapping, translucent glyph borders and shadows togreg2009-03-051-0/+50
| | | | | | | | avoid luminance build-up, which looks ugly. The resulting, modified bitmaps are stored in separate bitmap cache. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28824 b3059339-0415-0410-9bf9-f77b7e298cf2
* cosmetics: Remove useless parentheses from return statements.diego2008-05-161-1/+1
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26791 b3059339-0415-0410-9bf9-f77b7e298cf2
* Speak of libass instead of MPlayer in the libass license headers.diego2008-05-141-4/+4
| | | | | | | | We already use LIBASS_ prefixes for the multiple inclusion guards. Thus libass can be considered separate enough to warrant this. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26770 b3059339-0415-0410-9bf9-f77b7e298cf2
* Use standard license header.diego2008-05-131-16/+18
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26755 b3059339-0415-0410-9bf9-f77b7e298cf2
* Fix stupid bug in r23229.eugeni2007-05-031-1/+1
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23232 b3059339-0415-0410-9bf9-f77b7e298cf2
* Make cache_*_add functions return the pointer to new (copied) value.eugeni2007-05-031-7/+8
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23229 b3059339-0415-0410-9bf9-f77b7e298cf2
* Store outline_glyph (glyph border) in glyph cache.eugeni2007-04-201-0/+1
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23043 b3059339-0415-0410-9bf9-f77b7e298cf2
* Oops, fix compilation broken in r23037.eugeni2007-04-201-1/+1
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23038 b3059339-0415-0410-9bf9-f77b7e298cf2
* Collect hit/miss statistic in hash map, and print in -v mode.eugeni2007-04-201-2/+11
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23037 b3059339-0415-0410-9bf9-f77b7e298cf2
* Add outline glyph cache (unused yet).eugeni2007-04-201-0/+46
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23036 b3059339-0415-0410-9bf9-f77b7e298cf2
* Rename glyph cache to bitmap cache.eugeni2007-04-201-18/+18
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23035 b3059339-0415-0410-9bf9-f77b7e298cf2
* Add generic hash map implementation.eugeni2007-04-201-120/+167
| | | | | | | Reimplement both font cache and glyph cache on top of it. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23034 b3059339-0415-0410-9bf9-f77b7e298cf2
* Add some missing includes.eugeni2007-02-221-0/+1
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22310 b3059339-0415-0410-9bf9-f77b7e298cf2
* Implement \frx and \fry (and reimplement \frz) as 3d rotations.eugeni